有沒有在線學習c#2.0語言功能「謂詞」的好教程?學習謂詞的資源
我試圖瞭解如何使用謂詞的LINQ一起SQL修改我的查詢
什麼,我試圖做的是查詢客戶的表和過濾它的基礎上不斷變化的標準。例如
- 找到誰擁有郵編= 90210
- 找到誰是男性
- 找到誰是男性,所有客戶的所有客戶所有的客戶>有郵政編碼= 90210
現在的我這樣做使用if/else語句,這感覺很不錯
也有可能,我將不得不添加其他過濾器,所以我想要一個靈活的解決方案,這個問題很容易擴展無線thout打破任何東西(開閉原則,我認爲)
有沒有在線學習c#2.0語言功能「謂詞」的好教程?學習謂詞的資源
我試圖瞭解如何使用謂詞的LINQ一起SQL修改我的查詢
什麼,我試圖做的是查詢客戶的表和過濾它的基礎上不斷變化的標準。例如
現在的我這樣做使用if/else語句,這感覺很不錯
也有可能,我將不得不添加其他過濾器,所以我想要一個靈活的解決方案,這個問題很容易擴展無線thout打破任何東西(開閉原則,我認爲)
(順便說一句 - 與使用基於λ-謂詞LINQ到SQL是C#3.0/.NET 3.5,不C#2.0)
嘛,有什麼特別的你想做什麼?
謂詞只是過濾器(作爲委託或表達式);它們不直接允許您修改TSQL等,除非將它們與LINQ-to-SQL提供程序可以處理的函數(these)或UDF映射到數據上下文中作爲可組合函數(FunctionAttribute
)映射到您的數據上下文中。
在最簡單的:
誰是男性,>有郵政編碼= 90210
var qry1 = from cust in ctx.Customers
where cust.Gender == 'M' && cust.Zip = '90210'
select cust;
var qry2 = from cust in ctx.Customers
where cust.Zip = '90210'
select cust;
或者用於非簡單的例子(一動態搜索表單/單獨組合)
IQueryable<Foo> query = ctx.Customers;
// note "gender" here is "char?" for this example
if(gender != null) query = query.Where(x=>x.Gender == (char)gender);
if(zip != null) query = query.Where(x=>x.Zip == zip);
等
您還可以手動構建基於表達式的謂詞,但這是更多的工作,並需要知道Expression API。
我想要做的是查詢客戶的表格,並根據更改標準對其進行過濾。例如 找到誰擁有郵編= 90210 找到誰是男性 找到誰是男性,所有客戶的所有客戶所有的客戶>有郵政編碼= 90210 現在我使用的if/else這感覺非常不對 – jorsh1 2009-02-11 19:41:59
謂詞可以簡單地通過以下的簽名的方法:
bool Predicate<T>(T item)
它表示可由類型T的對象進行驗證或不是條件
它是在鏈路過濾可枚舉使用在.Where
條款中。
您也可以使用返回一個布爾值的lambda表達式:
item => item.Nickname == "ThinkBeforeCoding";
回覆您的評論 - 事實上,大多數LINQ操作具有「延遲執行」(沒有任何反應,直到你迭代它),讓您在「撰寫」一個逐步查詢 - 通過一系列步驟添加過濾器/排序/投影等。只有Count(),Max()等東西立即執行。 – 2009-02-11 23:41:25