【问题标题】:LINQ to Azure SearchLINQ to Azure 搜索
【发布时间】:2014-09-17 22:03:18
【问题描述】:
我正在创建一个将与 Azure 搜索服务一起使用的类。我希望它接受用于搜索文档的 LINQ 表达式,因此外部模块不知道 Azure 搜索语法。
有没有可以实现它的库?由于 Azure Search 还很年轻,我在 Internet 上找不到这样的。我发现的只是 RedDog 包,它非常好,但仍然需要字段名称和比较操作作为字符串,有一天肯定会成为“魔术”。
好的,Azure 搜索也接受 OData 格式的查询。我见过很少的 OData-query-to-LINQ-expression 解决方案,但没有一个相反的解决方案。我需要一个可以将 LINQ 转换为 OData 字符串的库。
感谢任何帮助。
【问题讨论】:
标签:
c#
.net
linq
azure
odata
【解决方案1】:
对于 OData 服务,您可以选择使用 .NET 客户端进行 OData 或 OData 代码生成器,它们对 LINQ 有很好的支持。您可以参考here 详细了解如何使用 OData 客户端生成器生成客户端代理类,然后使用 LIQN 轻松完成您需要的所有查询。而OData Client Generator是建立在OData Client for .NET之上的,我建议你可以直接从代码生成器入手。
但请注意,这两个库都仅适用于 OData V4。如果您使用较旧的 OData 版本,则不能使用代码生成器,而是使用 "Add Service Reference"。然后您还可以轻松地使用 LINQ 进行查询。
希望对您有所帮助。
【解决方案2】:
你可以在这里试试我的 GitHub 项目:
https://github.com/ubergeoff/HollowPoint.Azure
例子:
HollowPoint.Azure.DbTable<People> tt = new HollowPoint.Azure.DbTable<People>();
var filter = tt.Query()
.Where(t => t.Age >= 16 && t.Age < 33)
.ToODataString();
会输出OData格式字符串:
((Age ge 16) and (Age lt 33))