Linq Where子句根据参数更改

时间:2011-10-06 16:46:47

标签: linq where switching clause

我有一个linq语句,它根据where子句返回一个记录列表 此where子句检查两个参数值。
其中一个参数是可选的。
所以我需要一个建议,如果我可以根据可选参数
来切换我的where子句 像这样的东西

if(locid==0)
  {
   where (p.CustomerID == custid)
  }
 else{
   where (p.CustomerID == custid) & (p.LocationID == locid )
     }

任何人都可以帮助我如何才能完成这项工作。

感谢

3 个答案:

答案 0 :(得分:3)

您可以尝试这样写:

where (p.CustomerID == custid) && (locid == 0 || p.LocationID == locid )

答案 1 :(得分:3)

是的 - 可以编写查询(尽管@rsbarro指出,对于这种特殊情况你不需要这样做):

var query = p;

if(locid==0)
   query = query.Where( p =>p.CustomerID == custid);
else
   query = query.Where( p =>p.CustomerID == custid & p.LocationID == locid);

//any other conditions

答案 2 :(得分:1)

正如BrokenGlass所提到的,你应该使用composition:

IQueryable<Foo> query = unfiltered.Where(p => p.CustomerID == custId);
if (locid != 0)
{
    query = query.Where(p => p.LocationID == locid);
}

请注意,在您开始从中读取数据之前,不会执行查询,因此您无需担心这会产生多个请求。

在您的原始帖子中,您似乎尝试使用查询语法零碎 - 这不起作用,但“点符号”在这里非常简单。如果需要,您始终可以使用查询表达式创建初始查询 - 无论如何,该查询都不会立即执行。