2017-02-20 43 views
1

leaIdseaId大於零時,以下方法會返回數據。如果值大於零,則LINQ包含「&&」運算符

如果只輸入leaId,我應該如何更改查詢以返回數據?

由於&&運營商沒有返回,因爲seaId是可選的並且等於零。

public IQueryable<Stand> GetStand(int leaId, int seaId = 0) 
{ 
    return from c in db.Stands where c.LeaID == leaId && c.SeaID == seaId 
      select new Stand 
      { 
        //something 
      } 
} 
+1

'如果(seaId == 0)從C在db.Stands回報,其中c.LEadID == leadId其他<您的當前查詢>' –

回答

5

分成兩件查詢:

IQueryable<Stand> query=db.Stands.Where(c= c.LeaID == leaId); 

if(seaId>0) 
{ 
    query=query.Where(c= c.SeaID == seaId); 
} 
return query.Select(e=>...); 

另一個重要的事情是,你不應該使用的實體類型(Stand)項目查詢。在EF中,您可以投影匿名類型或使用DTO。如果您使用自定義類進行投影,請忽略最後一條評論。

+0

事實上的返回類型「Stand」是一個自定義類。困擾我的是,我必須執行兩個查詢。 (這是關於一個API端點,如果它很重要):) – OrElse

+1

@OrElse,你沒有執行兩個查詢,你正在建立一個查詢,當你實現結果時將被執行,例如調用'ToList'或迭代它 – octavioccl

0

您可以修改你的方法一樣

public IQueryable<Stand> GetStand(int leaId, int seaId = 0) 
    { 
     return from c in db.Stands where (c.LeaID == leaId) ||(seaId>0 && c.SeaID == seaId) 
       select new Stand 
       { 
         //something 
       } 
    } 
+0

你好,它作爲一個簡單的OR – OrElse