将LINQ中IQueryable <t>中的每个项目预处理到对象

时间:2016-05-30 10:36:28

标签: c# linq iqueryable

请查看以下代码:

var list = new List<MyClass>();
...
var selection = list
    .Preprocess()
    .Where(x => x.MyProperty = 42)
    .ToList();

我想以这样的方式实现Preprocess,它可以处理后面的谓词所选择的每个项目。因此,如果list包含数千个对象,我不希望Preprocess处理所有对象,而只需处理Where子句选择的那些对象。

我知道这听起来好像将Preprocess移到查询的末尾会更好,但我有理由这样做。

IQueryable<T>可以吗?或者它的行为类似于IEnumerable,其中整个LINQ到对象管道是严格顺序的?

1 个答案:

答案 0 :(得分:1)

出于您的目的,此处的IQueryableIEnumerable没有区别,正如您所说的那样,纯粹是顺序的。在您调用Where()之后,您实际上没有原始&#34;集合&#34;。

的痕迹。

现在,你可以理论上做你想做的事,但这需要滚动你自己的LINQ&#34;。 Preprocess()可能会返回某种PreprocessedEnumerable,所有自定义运算符都会附加到该ToList(),最终的for会对调用进行重新排序。