我在構建應用程序的一部分,該應用程序圍繞從數據庫中提取有關事務的信息。由於數據的性質,表格中有許多列要過濾。我有一個包含15個字段的篩選器選擇框,我希望能夠爲LINQ語句構建一個where子句。有趣的部分來自於我希望某些字段爲空的情況。例如,我希望能夠在任何或所有的過濾器:LINQ,查詢中的大型過濾器
- 交易類型
- 響應代碼
- 交易金額
- 還有更多
我可以建立一個謂語看起來像
Func<Transaction, bool> pred = t => t.ResponseCode == ResponseCode && t.TransactionType == TransactionType && t.TransactionAmount > 100.00;
Bu噸爲了能夠選擇哪些字段謂詞包括我concatenating the predicates在一起:
Func<Transaction, bool> pred = t => true;
if(ResponseCode != null)
pred.AndAlso(t => t.ResponseCode == ResponseCode);
// Rinse and repeat
然後傳遞一個謂詞的LINQ語句的where子句。
這種方式完全符合我的要求,但相當複雜。有沒有其他的方法來做到這一點?
更新: 感謝大法官的意見。我沒有使用LINQ to SQL,我使用LINQ對來自存儲庫的對象集合。你將如何以編程方式構建表達式過濾器?
如果你使用LinqToObjects(上System.Linq.Enumerable方法),你不需要擔心表達< Func>。請使用Func 。 –
2009-01-29 21:31:21