在选择之前,LINQ内部的操作和聚合

时间:2012-01-08 20:41:34

标签: c# .net linq ienumerable

以下我想添加的查询:

  • Trace.WriteLine(i.Name)

  • 然后计算任务而没有额外的枚举(没有单独的int count = tasks.Count()

示例查询

        var tasks = (
            from i in items
            where i.IsValid
            orderby i.Priority 
            select i.GetTask())
            .Take(100);

         await TaskEx.WhenAll(tasks);

我知道如何通过后续/额外的枚举实现这一点,但我想知道如何在一个枚举中完成所有这些操作?这很重要,因为i.IsValid操作实际上很昂贵,而且我只想调用一次才能进行过滤......

1 个答案:

答案 0 :(得分:1)

鉴于你无论如何你只拿走了100件物品,我只是用ToList强迫它进入一个清单:

var tasks = (from i in items
             where i.IsValid
             orderby i.Priority 
             select i.GetTask()).Take(100).ToList();

然后,您可以迭代它们以跟踪它们,轻松获取计数,并将列表传递给TaskEx.WhenAll