2012-09-25 58 views
1

我有一個List<string> filterCriteria其中包含一個或多個關鍵字來搜索我的數據庫中的一列,基於客戶端的用戶選擇。Linq multplie其中查詢或運營商

我的問題是,即時通訊不太確定如何建立我的LINQ到SQL語句,因爲它可能沒有'或'操作符或它可能有多個(10+)。

這是在此基礎列表中,我需要使用或經營者在我List<string> filterCriteria由詞查詢「originalQuery」我原來的查詢

var originalQuery = (from p in productContext.Products 
         select p); 

E.g.

originalQuery = originalQuery.Where(p => p.ProductRange == "criteria1" || 
    p.ProductRange == "criteria2"); 

等等......

+0

看看PredicateBuilder幫助你:http://www.albahari.com /nutshell/predicatebuilder.aspx –

+2

順便說一下,這裏不太清楚asp-classic在哪裏。我建議你澄清或刪除標籤。 –

回答

2

你可以做這樣的:

originalQuery = originalQuery.Where(p => filterCriteria.Contains(p.ProductRange)); 

這樣,您將獲得在originalQuery具有所選值之一的所有項目產品範圍。

+0

只是想強調,Where子句中的.Contains的使用很好地轉換爲Linq2Sql,因爲它在生成的SQL中被表示,因此被評估的服務器端。 – Tormod

+0

謝謝,這很好!冒着聽起來很愚蠢的風險,我可以問你,究竟是如何工作的? – lnelson92

+0

@ user1364791從邏輯的角度來看,Where()循環遍歷originalQuery中的所有對象,並只返回語句爲true的那些語句,即過濾條件包含對象p的ProductRange的地方。所以基本上,爲每個對象查看過濾標準。正如Tormod指出的那樣,這可能會很好地轉化爲SQL。所以內部工作取決於LINQ查詢背後的實際實現。 –

1

可以使用Any另一種方法:寫同樣的事情馬丁

originalQuery.Where(p => filterCriteria.Any(c => c == p.ProductRange)); 
1

還有一種方法:

var originalQuery = 
    from p in productContext.Products 
    where filterCriteria.Contains(p.ProductRange) 
    select p;