2013-10-27 182 views
2

如何在條款中使用條件?使用條件在Linq的哪裏條款

用戶可以從列表中選擇部分,產品和型號並查看結果。 我添加了一個項目See All在所有的領域,如果用戶選擇See All,他可以看到所有產品的所有section.so我想寫 檢查值,如果每個屬性等於-1點引入條件。

//My Model 
struct Model 
{ 
public int SectionCode{get;set;} 
public int ProductCode{get;set;} 
public int ModelCode{get;set;} 
} 

var query=DBContext.Model.Where(data=>data.ModelCode==_ModelCode//if ModelCode!=-1 
&& ProductCode==_ProductCode//if ProductCode!=-1 
&& SectionCode==_SectionCode//if SectionCode!=-1) 

我知道,我可以與一些if寫的,但我得查了很多condition.so我想知道,我怎麼能寫如果where子句?

回答

9

只是不添加where子句,如果你不需要它,即:

IQueryable<Model> query = DBContext.Model; 

if(_ModelCode != -1) 
{ 
    query = query.Where(data=>data.ModelCode==_ModelCode); 
} 

if(_ProductCode!= -1) 
{ 
    query = query.Where(data=>data.ProductCode==_ProductCode); 
} 

if(_SectionCode!= -1) 
{ 
    query = query.Where(data=>data.SectionCode==_SectionCode); 
} 
+0

+1:這比我的回答更好。但是,如果不明確指定查詢類型,則可能無法編譯。 – Douglas

+0

@IRSOG查詢中的where子句被鏈接 - 即,如果它不是-1,則首先按_ModelCode過濾,如果它不是-1,則通過_ProductCode過濾第一個過濾的結果,如果它不是-1,則通過_SectionCode過濾結果(如果不是 - 1。如果「_ProductCode和_SectionCode爲-1」,則只有ModelCode對您的模型進行過濾。如果_ProductCode和_ModelCode都不是-1,那麼你的查詢將被_ProductCode和_ModelCode – Isantipov

+0

@IRSOG過濾,換句話說,它「跳過-1的每個項目的條件」 – Isantipov

4

試試這個:

var query=DBContext.Model.Where(data => (ModelCode == -1 || data.ModelCode == _ModelCode) 
&& (ProductCode == -1 || ProductCode == _ProductCode) 
&& (SectionCode == -1 || SectionCode == _SectionCode) 
+0

:謝謝你的回答。 – KF2

4

你可以做到這一點使用邏輯運算符:

var query = DBContext.Model.Where(data => 
    (_ModelCode == -1 || data.ModelCode == _ModelCode) 
&& (_ProductCode == -1 || data.ProductCode == _ProductCode) 
&& (_SectionCode == -1 || data.SectionCode == _SectionCode)) 
+0

:謝謝你的回答。 – KF2