2

我知道这有效:

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

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

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

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

4

5 回答 5

4

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

var result = someCollection.Where(x=> someBool || x.Key == 1);
于 2013-05-08T07:56:59.250 回答
4

您正在寻找条件OR运算符

var result = someCollection.Where(x => someBool || x.Key == 1);
于 2013-05-08T07:57:39.613 回答
2

你也可以这样做,

var result = someCollection;

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

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

于 2013-05-08T08:16:35.657 回答
1

这是经过测试的代码

var result = someCollection.Where(x => someBool || x.Key == 1);
于 2013-05-08T08:12:17.757 回答
1

作为使用||insideWhere谓词的替代方法,有时仅在需要时才应用它是有用Where的。

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

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

于 2013-05-08T08:15:46.680 回答