在lambda中选择全部Where()

时间:2013-05-08 07:54:38

标签: c# asp.net lambda

我知道这有效:

var result = someCollection.Select(x=>x);

我使用Where()方法得到了类似的结果:

var result = someCollection.Where(x=> someBool ? x : x.Key == 1);

如果someBool为真,我想选择“所有内容”。上面的代码不起作用。有没有办法用lambda解决这个问题?

5 个答案:

答案 0 :(得分:4)

使用||运算符,如果someBool为真,则会选择所有记录。

var result = someCollection.Where(x=> someBool || x.Key == 1);

答案 1 :(得分:4)

您正在寻找条件 - OR运算符

var result = someCollection.Where(x => someBool || x.Key == 1);

答案 2 :(得分:1)

这是经过测试的代码

var result = someCollection.Where(x => someBool || x.Key == 1);

答案 3 :(得分:1)

作为在||谓词中使用Where的替代方法,只有在需要时才应用Where

var result = source;
if(!someBool)
  result = result.Where(x => x.Key == 1);

这通常要快一些,因为它根本不需要过滤。但它会将source暴露给外部,这有时是不可取的。

答案 4 :(得分:1)

你也可以这样做,

var result = someCollection;

if (someBool)
{
    result = someCollection.Where(x => x.Key == 1);
}

我认为额外的输入可以提高代码的可读性,并可以提高性能。