2011-10-06 77 views
1

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

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

任何一个可以帮助我,我怎么能得到这个工作,我的切换where子句。

感谢

回答

2

你可以尝试这样写的:

where (p.CustomerID == custid) && (locid == 0 || p.LocationID == locid) 
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 
1

正如BrokenGlass提到的,你应该使用成分:

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

请注意,查询是而不是直到您开始从它读取数据,因此您不必担心这会产生多个请求。

它看起来像你原来的文章中,你试图使用零碎的查询语法 - 这将无法正常工作,但“点符号”在这里很简单。如果你愿意的话,你总是可以使用查询表达式来创建你的初始查询 - 同样,这个查询不会立即执行。