Enumerable.ToDictionary是否只检索它需要的内容?

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)

Jam*_*ran 5

Enumerable.ToDictionary适用于IEnumerable对象.语句的第一部分"(来自...选择术语")是一个IQueryable对象.Queryable将查看表达式并构建SQL语句.然后它将它转换为IEnumerable以传递给ToDictionary().

换句话说,是的,你的第二个版本会更有效率.