Func<TObject, bool>是委托(delegate)
Expression<Func<TObject, bool>>是表達式
Expression編譯後就會變成delegate,才能運行。比如
Expression<Func<int, bool>> ex = x=>x < 100;
Func<int, bool> func = ex.Compile();
然後你就可以調用func:
func(5) //-返回 true
func(200) //- 返回 false
而表達式是不能直接調用的。
===========================
案例:不正確的查詢代碼造成的數據庫全表查詢。
上面代碼邏輯是根據條件動態生成LINQ查詢條件,將Func類型的變量作為參數傳給Where方法。
實際上Where要求的參數類型是:Expression<Func<TSource, bool>>。
解決方法:
不要用Func<TSource, bool>,用Expression<Func<TSource, bool>>。
轉自:http://www.cnblogs.com/wow-xc/articles/4952233.html