【问题标题】:How do I query an Azure storage table with Linq method syntax in .net core?如何在 .net 核心中使用 Linq 方法语法查询 Azure 存储表?
【发布时间】:2019-12-14 00:02:59
【问题描述】:

我想使用 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-core azure-table-storage


    【解决方案1】:

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

    【讨论】:

    • @doghy cosmos db 的任何示例。 cosmos db sdk 是否支持 azure 表存储?
    猜你喜欢
    • 2011-04-16
    • 1970-01-01
    • 1970-01-01
    • 2011-08-01
    • 1970-01-01
    • 1970-01-01
    • 2013-08-09
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多