当变量为空或null时选择all,否则选择已过滤的值

时间:2014-12-17 06:37:50

标签: c# sql linq linq-query-syntax

我的linq查询总结了类似的内容 -

       string CustomerID;// can be "ALL" or any value

        var itemlist = ( from itmhstry in context.ItemHistories
               join itm in context.Items on itmhstry.ItemID equals itm.ItemID into itm_join
               where itmhstry.CustomerID == CustomerID
.......................)

并继续查询以选择所需的值

此处如何在CustomerID值为ALL / NULL时选择所有值(例如select *>>不带过滤器)。如何为此目的框架where子句?

我可以使用if else重写相同的查询,以便有两个不同的查询来处理这个问题,但有没有更简单的方法呢?

1 个答案:

答案 0 :(得分:4)

试试这个:

var itemlist = from itmhstry in context.ItemHistories
               join itm in context.Items on itmhstry.ItemID equals itm.ItemID into itm_join
               where string.IsNullOrEmpty(CustomerID) || 
                     (CustomerID == "ALL") ||
                     (itmhstry.CustomerID == CustomerID) 

如果CustomerID为空或为空或" ALL",则where子句中的第一个或第二个谓词将评估为true并且不会过滤应用。如果CustomerID不为空而且不为空且不是"所有",那么您最终会得到初始查询。