在LINQ中使用条件

Mik*_*owe 1 c# linq asp.net-mvc asp.net-mvc-4 entity-framework-5

如何使用LINQ中的条件重写它?

如果selectID = 0,我希望它运行:

   var products = from p in product.Table
       orderby p.Name
       where (p.stock == stockId)
      select p;        
Run Code Online (Sandbox Code Playgroud)

如果selectID不为零,我希望它运行:

   var products = from p in product.Table
       orderby p.Name
       where (p.stock == stockId) &&        
             (p.Id == selectID)
      select p;             
Run Code Online (Sandbox Code Playgroud)

这下面有效,但是我必须使用"虚拟"第二个条件(p.hidden == false)才能使三元运算符工作:

   var products = from p in product.Table
       orderby p.Name
       where (p.stock == stockId) &&        
      (selectID != 0 ? p.Id == selectID : p.hidden == false)
      select p;             
Run Code Online (Sandbox Code Playgroud)

有没有办法摆脱(p.hidden == false),因为逻辑中不需要它,只是让操作员工作.谢谢

Tim*_*ter 6

您可以使用与记录相同的Id作为后备值:

var products = from p in product.Table
               orderby p.Name
               where p.stock == stockId && 
                     p.Id == (selectID == 0 ? p.Id : selectID)
               select p; 
Run Code Online (Sandbox Code Playgroud)

但是,由于这可能会导致查询计划效率降低,我只需使用if-else:

var products = product.Table.Where(p => p.stock == stockId);
if(selectID != 0)
    products = products.Where(p => p.Id == selectID);
products = products.OrderBy(p=> p.Name);
Run Code Online (Sandbox Code Playgroud)