2017-02-20 92 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