、私は.Where({"Doe", "Don", "Donna"}.Contains(x.LastName))
のようなものを変換するにはどうすればよいアレイ
?
は、私がどのように私は動的に、上記のように、有効なBinaryExpression
を構築しない、だから、基本的に配列{"Doe", "Don", "Donna"}
とメンバー式x.LastName
与え
.Where(x => x.LastName == "Doe" || x.LastName == "Don" || x.LastName == "Donna")
にこの.Contains
式を変換する必要がありますか?
これはちょっとした背景ですが、NoSQLデータベースへのLINQインターフェイスを構築しようとしていますが、これはどのように対処するかわかりません。Enumerable.Contains
MemberCallExpression
です。だから私はそのEnumerable.Contains
を、データベースが扱える簡単なOrElse
式に変換しようとしています。
私はMemberCallExpression
のArguments[0]
からx.LastName
を得ることができる、と私は定数を列挙し、
List<BinaryExpression>
を構築することができたことを、式から定数の列挙を取得する方法を考え出しました
Expressions.Add(Expression.Equal(node.Arguements[0], Expression.Constant(item)));
どのように私はBinaryExpression
秒のリストを取り、フォームExpressions[0] OrElse Expressions[1] OrElse Expressions[2]
の有効BinaryExpression
を構築します。
私が試した:
BinaryExpression expression = Expressions[0];
for (var idx = 1; idx < Expressions.Count - 1; idx++)
{
expression += Expression.OrElse(Expressions[idx], Expressions[idx +1]);
}
をしかし+=
がBinaryExpression
上で有効ではありません。
.Where(lambda);
ありがとう、それは次のようになります。あなたはそのため
Expression.OrElse
方法を使用する必要があります、Expressions.Count - 1.ではなく、実際には式がローカル変数であるため、代わりに式でなければなりません。しかし、これは私の問題を解決しました。また、私のコードを分かりやすくするためにGSergに感謝したい。 –@ H.D.Hを受け入れていただきありがとうございます。このバンプは500ポイントの評判以上になり、より多くの特権を開くことができます:) –
私の喜び、Tsahiアッシャー、あなたはほとんど表現を簡単に見せます。私はどれくらい近くにいるのかちょっと恥じていて、まだ助けを求めなければならなかった。 –