c# - 如何在 .net 核心中使用 Linq 方法语法查询 Azure 存储表?
问题描述
我想使用 linq 表达式针对 Azure 表存储查询数据。
目前我正在使用 TableQuery.GenerateFilterCondition,它不能提供我想要的灵活性。
我正在使用的代码是:
CloudTableClient tableClient = storageAccount.CreateCloudTableClient();
cloudTable = tableClient.GetTableReference("Data");
//QueryFilters.GetQueryExpression(searchParameters);
//string expBody = ((LambdaExpression)whereClause).Body.ToString();
string filter1 = TableQuery.GenerateFilterCondition("PartitionKey", QueryComparisons.Equal, "PBIFinalData");
var condition = TableQuery.GenerateFilterCondition("Number", QueryComparisons.Equal, "98880302");
string filterRange = TableQuery.CombineFilters(filter1, TableOperators.And, condition);
TableQuery<MCIOData> query = new TableQuery<MCIOData>().Where(filterRange);
我想组合多个过滤条件,每个条件可能有一个或多个值可以在表中找到。
我已经创建了 lambda 表达式,但是我应该将该 lambda 表达式传递给哪个函数以获得结果
.
internal static Expression<Func<Data, bool>> GetQueryExpression(List<FieldTemplate> searchParameters)
{
var param = Expression.Parameter(typeof(Data));
Expression exp = null;
if (searchParameters.Count() == 1)
{
exp = GetQuery(param, searchParameters[0]);
}
else
{
exp = GetQuery(param, searchParameters[0]);
if (exp != null)
{
for (int i = 1; i < searchParameters.Count(); i++)
{
exp = Expression.And(exp, GetQuery(param, searchParameters[i]));
}
}
}
return Expression.Lambda<Func<MCIOData, bool>>(exp, param);
}
解决方案
我认为旧的 azure 表存储的客户端 sdk 没有 linq 提供程序。我也不认为 Entity 框架支持旧的表存储 api,如果它们中的任何一个存在,这将是您使用本机 linq 查询的 2 个简单选项。所以你可以做的是实现你自己的自定义 Linq 提供程序,一些示例在这里: https://weblogs.asp.net/mehfuzh/writing-custom-linq-provider https://blogs.msdn.microsoft.com/ mattwar/2008/11/18/linq-building-an-iqueryable-provider-series/
或使用原生支持 Linq to Sql 的新 Cosmos Db 表存储: https ://docs.microsoft.com/en-us/azure/cosmos-db/sql-query-linq-to-sql
推荐阅读
- gridjs - 在测试中看到 Grid.js 错误,但不是完整的应用程序
- python - 无法将参数传递给 QThread
- python - 如何使用 pandas 中提取的关键字创建关键字列?
- firebase - 从 Firebase 加载图像非常慢
- node.js - Outlook 节点插件:将电子邮件存储在本地/在 Outlook 数据文件中
- python - 如何在散点图例中显示每个标签的数量?
- angular - 角度路线 - 如何更改参数值,具有查询参数和相对导航
- python - 什么是 torch.Tensor 的“data.max”?
- python - 如何在 docker 容器中运行 python 脚本?
- liferay-7 - 我们如何在 liferay dxp 7.3 中实现“logoutpreaction”和“logoutpostaction”