我正在爲我的一個核心L2S類構建一個函數庫,它們都返回一個bool以允許檢查某些情況。LINQ to SQL:注意預構建表達式
例子:
Expression<Func<Account, bool>> IsSomethingX =
a => a.AccountSupplementary != null
&& a.AccountSupplementary.SomethingXFlag != null
&& a.AccountSupplementary.SomethingXFlag.Value;
現在,來查詢這不是真的,我不能做到這一點:
var myAccounts= context.Accounts
.Where(!IsSomethingX); // does not compile
然而,使用從PredicateBuilder類的語法,我來與此:
public static IQueryable<T> WhereNot<T>(this IQueryable<T> items,
Expression<Func<T, bool>> expr1)
{
var invokedExpr = Expression.Invoke(expr1, expr1.Parameters.Cast<Expression>());
return items.Where(Expression.Lambda<Func<T, bool>>
(Expression.Not(invokedExpr), expr1.Parameters));
}
var myAccounts= context.Accounts
.WhereNot(IsSomethingX); // does compile
其實際上產生正確的SQL。
這是否看起來像一個很好的解決方案,有什麼我需要注意的,可能會導致我未來的問題?
+1,所提出的解決方案很好,更易於使用。 – 2010-05-24 16:41:58