我有一个linq语句,它根据where子句返回一个记录列表
此where子句检查两个参数值。
其中一个参数是可选的。
所以我需要一个建议,如果我可以根据可选参数
来切换我的where子句
像这样的东西
if(locid==0)
{
where (p.CustomerID == custid)
}
else{
where (p.CustomerID == custid) & (p.LocationID == locid )
}
任何人都可以帮助我如何才能完成这项工作。
感谢
答案 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);
}
请注意,在您开始从中读取数据之前,不会执行查询,因此您无需担心这会产生多个请求。
在您的原始帖子中,您似乎尝试使用查询语法零碎 - 这不起作用,但“点符号”在这里非常简单。如果需要,您始终可以使用查询表达式创建初始查询 - 无论如何,该查询都不会立即执行。