由于双重.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();
答案 0 :(得分:1)
Select
不会枚举查询 - 仅使用foreach
进行迭代或使用ToList
或ToArray
保存到集合中实际执行查询。所以不,你没有两次枚举这个集合。