让Linq保存双枚举而不是使用扩展方法样式

时间:2015-10-01 15:12:57

标签: c# linq

由于双重.Select()并且let运算符是否真的消除了双重枚举,是否会更频繁地枚举第一个查询?

var y = product.Documents
.Where(p => p.Type == "test_DOC")
.Select(p => GetPathToLabel(p.Name))
.Select(path => FileExists(path) ? File.ReadAllBytes(path) : null)
.Where(data => data != null)
.ToList();

var x = (from p in product.Documents
     where p.Type == "test_DOC"
     let path = GetPathToLabel(p.Name)
     let data = FileExists(path) ? File.ReadAllBytes(path) : null
     where data != null
     select data).ToList();

1 个答案:

答案 0 :(得分:1)

Select不会枚举查询 - 仅使用foreach进行迭代或使用ToListToArray保存到集合中实际执行查询。所以不,你没有两次枚举这个集合。