1

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

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

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

谢谢

4

3 回答 3

3

你可以试试这样写:

where (p.CustomerID == custid) && (locid == 0 || p.LocationID == locid )
于 2011-10-06T16:48:37.267 回答
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
于 2011-10-06T16:49:04.650 回答
1

正如 BrokenGlass 提到的,您应该使用组合:

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

请注意,在您开始从中读取数据之前不会执行查询,因此您不必担心会发出多个请求。

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

于 2011-10-06T16:51:59.560 回答