C#使用Trim查询Azure表存储中的字符串字段

xvw2m8pv  于 2023-01-27  发布在  C#
关注(0)|答案(1)|浏览(143)

我尝试通过检查用户名来查看通过API提供的用户是否存在于表存储中。代码如下所示:

public async Task<bool> UserExistsAsync(User user)
{
    var username = user.Username.Trim();
    var query = _usersTableClient.QueryAsync<UserEntity>(u => 
         u.Username.Trim().Equals(username, StringComparison.InvariantCultureIgnoreCase));

    await foreach (var page in query.AsPages())
    {
         if (page.Values.Any())
             return true;
    }

    return false;
}

但是,此代码返回错误,因为不支持使用Trim()方法查询Azure表存储:
不支持方法修剪。
我需要删除空格,因为表中充满了包含空格的值(例如
”SomeUser”
)。我没有访问该表的权限,也无法要求客户端删除空格。此外,还将加载内存中的所有条目并逐个检查它们(并最终在加载后修剪它们)并不是一个解决方案,因为表有超过100k的行。有没有我可以使用的解决方案来完成这个任务?
编辑:尝试使用Contains()Substring(),它们也是不允许的。

hivapdat

hivapdat1#

在Azure中创建一个存储帐户,并使用代码中的连接字符串。

用于修剪的C#代码

TableQuery<Customer> tableQuery = new TableQuery<Customer>();
        foreach (Customer customerEntity in table.ExecuteQuery(tableQuery))
        {
            
            CloudStorageAccount storageAccount = CloudStorageAccount.Parse("storageConnectionString");
            CloudTableClient tableClient = storageAccount.CreateCloudTableClient();

            CloudTable tbl = tableClient.GetTableReference("tblCustomers");

            string name = customerEntity.CustomerName.Trim();

            TableOperation tblOperation = TableOperation.Retrieve<Customer>("partitionKey", name);

            TableResult tr = tbl.Execute(tblOperation);

            if (tr.Result != null)
            {
                Customer user = (Customer)tr.Result;
                Console.WriteLine("User found: {0}", user.RowKey);
            }
            else
            {
                Console.WriteLine("User not found: {0}", name);
            }
        }

例如,下面突出显示的客户名称有空格。

并且可以使用下面的代码删除此空白。

foreach (Customer entity in table.ExecuteQuery(tableQuery))
        {
            entity.CustomerName = entity.CustomerName.Replace(" ", "");
            table.Execute(TableOperation.Replace(entity));
        }

相关问题