3

ブリキに書かれているとおり、通常は PredicateBuilder が明らかな答えになる設計上の問題がありますが、実行すると次のようなエラーが発生します。

The expression 
((([10007].PartitionKey == "df2907ad-2094-4b7a-9796-d077f14b25bc") 
And True) 
And Invoke(f => (True AndAlso Invoke(job => (job.MigrationExecutionId == "5fa0bd4c-4745-4452-8e52-a0329c00dafb"), f)), [10007])) 
is not supported.

述語ビルダー、またはその他の形式の式ツリー構文を使用して、クエリを作成し、Azure テーブルに対して実行する方法はありますか?

4

2 に答える 2

0

はい、 PredicateBuilderを Azure Table Storage で使用できます。次の形式 (疑似コード) のクエリを作成するとします。

where partitionkey = "X" and (email = "Y" or email = "Z")

これは次のように行うことができます

    public string[] GetByEmail(string companyId, string[] emails)
    {
        var inner = PredicateBuilder.New<IssuerTableEntity>(false);
        foreach (var email in emails.Select(x => x.ToLowerInvariant()).Distinct())
        {
            var temp = email;
            inner = inner.Or(x => x.EmailLowercase == temp);
        }

        var outer = PredicateBuilder.New<MyTableEntity>(false);
        outer = outer.And(x => x.PartitionKey == companyId);
        outer = outer.And(inner);

        CloudTable table = GetTable(MyTableName);  
        return table.CreateQuery<MyTableEntity>()
            .Where(outer)
            .Select(x => x.RowKey)
            .ToArray();
    }

の使用に注意してくださいDistinct()-これは、重複を提供するときにエラーが発生したためです。

于 2017-06-04T16:02:24.130 に答える