2013-11-04 44 views
-3

我有3下拉列表和搜索按鈕。下拉菜單提供搜索條件。 所以,這些值可以是全部,很少或沒有一個。 T-sql存儲過程將是foll。是否有可能爲此寫一個linq。Linq與多個地方條件

Select customerId, productId, supplierId 
From Orders 
Where (customerId = @customerId Or @customerId IS NULL) 
    And (productId = @productId Or @productId IS NULL) 
    And (supplierId= @supplierId Or @supplierId IS NULL) 

我使用.NET 4.0,實體數據模型

+6

你甚至試過了嗎?這很簡單... –

+0

[Linq中的多個WHERE子句]可能的重複(http://stackoverflow.com/questions/679644/multiple-where-clause-in-linq) –

+0

或http://stackoverflow.com/questions/10742793/entity-framework-linq-is-null-is-not-null-issue –

回答

6

這是一個非常簡單的查詢,如果你不完全知道如何做的事情在LINQ,檢查出LINQ 101 samples微軟。他們提供了一個簡單的參考LINQ的常見任務。

剛剛從臀部射擊;假設您有變量productId,customerIdsupplierId下面的代碼應該工作。

using(var db = new YourDbContext()) 
{ 
    var results = db.Orders.Where(o => 
      (customerId == null || o.CustomerId == customerId) 
      && (productId == null || o.ProductId == productId) 
      && (supplierId == null || o.SupplierId == supplierId)) 
     .Select(o => new { o.CustomerId, o.ProductId, o.SupplierId }).ToList(); 
} 
+0

請注意,原始SQL表示'@customerId IS NULL',而不是'customerId IS NULL' ... – Heinzi

+0

謝謝。姍姍來遲,沒有聽清楚。 – doogle

+0

非常感謝你。這工作 – Ruby

2

使用LINQ,你有可能只添加Where條款在實際需要它:

var o = context.Orders; 

if (userHasChosenACustomerId) 
{ 
    o = o.Where(o => o.CustomerId == theChosenCustomerId); 
} 

if (userHasChosenAProductId) 
{ 
    o = o.Where(o => o.ProductId == theChosenProductId); 
} ... 

var result = o.ToList(); 

可能比OR S比清楚地傳達你的意圖。 (用你的下拉UI控件的適當方法替換userHasChosenACustomerIdtheChosenCustomerId。)