首页 > 解决方案 > 如何在 .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);
    }

标签: c#azure.net-coreazure-table-storage

解决方案


我认为旧的 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


推荐阅读