3
私はコード Expression for Linq unionとintersectの使い方は?
public static class PredicateExtensions
{
public static Expression<Func<T, bool>> True<T>() { return f => true; }
public static Expression<Func<T, bool>> False<T>() { return f => false; }
public static Expression<Func<T, bool>> Or<T>(this Expression<Func<T, bool>> expression1, Expression<Func<T, bool>> expression2)
{
var invokedExpression = Expression.Invoke(expression2, expression1.Parameters.Cast<Expression>());
return Expression.Lambda<Func<T, bool>>(Expression.Or(expression1.Body, invokedExpression), expression1.Parameters);
}
public static Expression<Func<T, bool>> And<T>(this Expression<Func<T, bool>> expression1, Expression<Func<T, bool>> expression2)
{
var invokedExpression = Expression.Invoke(expression2, expression1.Parameters.Cast<Expression>());
return Expression.Lambda<Func<T, bool>>(Expression.And(expression1.Body, invokedExpression), expression1.Parameters);
}
}
がどのように代わりにLINQ連合(EU)と交差法のこのコードを使用する必要がありますか?フォームの労働組合との交点を持っている場合は
これはよく知られている述語ビルダーです。これは '.Where'節の構成を容易にするために存在します。 'Union'や' Intersect'とは何の関係もありません。通常どおり、これらのメソッドを使用します。 ";(N") ' 対応して、' ' 述語= predicate.Or P => p.CustomerID.Contains() ' VAR述語= PredicateExtensions.False()のようなものを使用": –
は私がヒントを与えられました「Union」は「Or」で置き換えられ、「Intersect」は「And」で置き換えられます。 – BILL
ヒントは私には意味がありません。 'Union'と' Intersect'はシーケンス上で動作する集合演算です。 PredicateBuilderの 'And'と' Or'は述語で動作するブール演算です。彼らは本当にお互いに関係がありません。 –