Mik*_*ras 4 linq enumerable lazy-evaluation todictionary lazy-sequences
我正在使用Enumerable.ToDictionary从linq调用创建一个Dictionary:
return (from term in dataContext.Terms
where term.Name.StartsWith(text)
select term).ToDictionary(t => t.TermID, t => t.Name);
Run Code Online (Sandbox Code Playgroud)
该调用是否会获取每个术语的全部内容,还是仅从我的数据提供者中检索TermID和Name字段?换句话说,如果我这样写它,我会保存自己的数据库流量:
return (from term in dataContext.Terms
where term.Name.StartsWith(text)
select new { term.TermID, term.Name }).ToDictionary(t => t.TermID, t => t.Name);
Run Code Online (Sandbox Code Playgroud)
Enumerable.ToDictionary适用于IEnumerable对象.语句的第一部分"(来自...选择术语")是一个IQueryable对象.Queryable将查看表达式并构建SQL语句.然后它将它转换为IEnumerable以传递给ToDictionary().
换句话说,是的,你的第二个版本会更有效率.