在azure表中使用c#中的LINQ获取包含单词序列的记录

本文关键字:包含单 获取 记录 LINQ 中的 azure | 更新日期: 2023-09-27 18:12:07

我有一个Azure表,其中有一个列名为" PartitionKey "。

下面的代码获取一个关键字作为输入,并返回与关键字具有相同"PartitionKey"的记录。例如,如果关键字是"Massachusetts Institute of Technology",并且表中有一条PartitionKey为"Massachusetts Institute of Technology"的记录,则获取该记录。

我需要一些不同的东西。如果PartitionKey是"Massachusetts Institute of Technology",关键字是"Institute of Technology",也可以获取该记录。也就是说,如果关键字是一个单词或一个单词序列,我希望它发生。但是,例如,如果关键字是"Massachu",则代码必须返回0个结果,而如果关键字是"Massachusetts",则获取"Massachusetts Institute of Technology"的全部记录。这可能吗?

TableQuery<Entity> query=
new TableQuery<Entity>()
.Where(TableQuery.GenerateFilterCondition("PartitionKey",
QueryComparisons.Equal, keyword));

在azure表中使用c#中的LINQ获取包含单词序列的记录

不是在我可以测试这个的东西前面,但也许这个:

var query = new TableQuery<Entity>().Where(t => t.PartitionKey.CompareTo(keyword)>=0);

如果我没记错的话,TableQuery在这方面是有一定限制的。

编辑:似乎有点清晰是有序的。由于OData不支持字符串函数,因此通常只能使用以类型开始/以类型结束的功能。这个主题在这里更深入地讨论,但最直接相关的部分似乎是:

var query = _serviceContext.FoodTable.AsTableServiceQuery()
        .Where(c => c.PartitionKey.CompareTo("Vegetable")>=0
        && c.PartitionKey.CompareTo("Vegetablf")<0
        && c.Color == "Green");

在上面的代码中,像"Vegetable"answers"Vegetablef"这样的partionkey是可以的,但是"VegetableLike"或"VegetableSomethingElse"就不合适了。谓词建立了查询的下界和上界。

考虑到这些限制,我担心OP想要完成的任务(全文全词搜索,如果理解正确的话)不能完全通过TableQuery对象实现。