3
我有代碼如何使用Linq表達式和相交?
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聯盟和Intersect方法呢?
這是衆所周知的謂詞構建器 - 它的存在是爲了方便構成'.Where'子句。它與'Union'或'Intersect'無關 - 按照通常的方式使用這些方法。 – 2012-03-07 18:14:21
我收到了一條提示:「使用類似 'var predicate = PredicateExtensions.False();' 'predicate = predicate.Or(p => p.CustomerID.Contains(」N「))' 相應地, 「聯盟」由「或」替換爲「和」的「相交」。「 –
BILL
2012-03-07 18:22:00
那暗示對我沒有意義。 「聯合」和「交集」是對一個序列進行操作的設置操作。 PredicateBuilder的'And'和'Or'是操作謂詞的布爾操作。他們真的沒有任何關係。 – 2012-03-07 18:26:37