在LINQ中使用条件

时间:2014-05-19 14:46:07

标签: c# asp.net-mvc linq 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;        

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

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

以下是有效的,但我必须使用"虚拟"第二个条件(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;             

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

2 个答案:

答案 0 :(得分: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; 

但是,由于这可能会导致查询计划效率降低,我只会使用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);

答案 1 :(得分:2)

您也可以这样写:

var products = from p in product.Table
       orderby p.Name
       where (p.stock == stockId) &&        
             (p.Id == selectID || selectID == 0)
      select p;

如果未提供ID,|| selectID == 0只返回true,并且仍允许查询按预期运行。以下链接是我学习这个简单技巧的方法。

http://www.sommarskog.se/dyn-search-2008.html