gpt4 book ai didi

c# - Azure 表存储范围查询,常用条件包含在方法中

转载 作者:太空狗 更新时间:2023-10-29 19:50:21 29 4
gpt4 key购买 nike

我在应用程序中经常遇到这样的情况:我创建一个查询来获取所有分区键为常量但行键应在词汇范围内的实体(例如,仅以某个前缀开头的行):

//query to get all entities in partition "KnownPartition" where RowKey starts with "Prefix_"
CloudTableQuery<MyEntity> query =
(from e in tableServiceContext.CreateQuery<MyEntity>(tableName)
where e.PartitionKey == "KnownPartition"
&& e.RowKey.CompareTo("Prefix_") > 0
&& e.RowKey.CompareTo("Prefix`") <= 0 // ` is '_' + 1
select e).AsTableServiceQuery();

我必须使用 CompareTo,因为此类查询不支持 StartsWith 等字符串函数。这可行,但条件很难阅读并且重复很多。因此,我不想编写大量具有这种难以阅读的条件的查询,而是希望创建一个“内联”它的函数:

public static Boolean HasPrefix(this String rowKey, String prefix)
{
return rowKey.CompareTo(prefix + '_') > 0 && rowKey.CompareTo(prefix + '`') <= 0;
}

CloudTableQuery<MyEntity> query =
(from e in tableServiceContext.CreateQuery<MyEntity>(tableName)
where e.PartitionKey == "KnownPartition" && e.RowKey.HasPrefix("Prefix")
select e).AsTableServiceQuery();

但是当我运行这个程序时,我从 Azure 收到一个关于我的函数不受支持的异常。有什么办法可以这样写以使其受到支持吗?毕竟,我使用的条件与有效的查询完全相同,只是封装在一个函数中......

最佳答案

这是凯文回答的概括。它做同样的事情,但适用于任何前缀字符串,而不仅仅是大卫在原始问题中询问的特定情况。

public static Expression<Func<MyEntity, bool>> HasPrefix(String prefix) 
{
char lastChar = prefix[prefix.Length - 1];
char nextLastChar = (char)((int)lastChar + 1);
string nextPrefix = prefix.Substring(0, prefix.Length - 1) + nextLastChar;

return e => e.RowKey.CompareTo(prefix) >= 0 && e.RowKey.CompareTo(nextPrefix) < 0;
}

关于c# - Azure 表存储范围查询,常用条件包含在方法中,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12958848/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com