【发布时间】:2018-06-08 14:59:51
【问题描述】:
如何向Take() 调用添加条件?
query.Take(isTrue ? 10 : 0);
我想取查询返回的所有项目,而不是 0。
【问题讨论】:
-
您没有为这个问题提供任何背景信息,我的第一直觉告诉我,您尝试签入 isTrue 的任何条件都应该在 Take() 之前检查,您可以获得列表中的 Count() 项,但是那将是非常低效和错误的
如何向Take() 调用添加条件?
query.Take(isTrue ? 10 : 0);
我想取查询返回的所有项目,而不是 0。
【问题讨论】:
Take 并没有真正的“全部”参数,但您可以有条件地应用该子句。
IEnumerable query = something;
if (isTrue)
query = query.Take(10);
...
【讨论】:
ToList 放在错误的位置(惰性枚举)。这只是明确写了 . 链接所做的同一行
如果您真的想要使用条件运算符,那么这将是继续的方式:
var result = query.Take(isTrue ? 10 : query.Count());
虽然,我不得不承认如果query 是IEnumerable<T>,那么与其他答案相比,这是次优的。
如果它是一个列表,那么在性能方面的等效版本将是:
var result = query.Take(isTrue ? 10 : query.Count);
【讨论】:
if 声明可读性等...
query 实际上 是什么类型。根据实际类型,可以避免“枚举两次”。
IEnumerable 案例:)