我有一个简单的Linq查询:
var dict = (from i in Customers select i).ToDictionary(i => i.Id1, i => i.Id2);
Run Code Online (Sandbox Code Playgroud)
不Linq2sql知道削减选择两个字段(Id1, Id2)虽然查询说select i?
否Queryable.LinQ to SQL所依赖的类不包含声明ToDictionary(并且没有其他类具有合适的扩展方法),因此它最终使用实现Enumerable- 即LINQ to Objects.它使用普通代理而不是表达式树,因此实际上没有任何合理的方法可以解决所需的问题.
要使查询更有效,请使用匿名类型捕获部件中您需要的所有内容Select:
var dict = db.Customers
// Here i is a full Customer, logically...
.Select(i => new { i.Id1, i.Id2 })
// But here p is just the pair of Id1, Id2
.ToDictionary(p => p.Id1, p => p.Id2);
Run Code Online (Sandbox Code Playgroud)
另一种方法是自己做一个扩展方法 - 应该可以编写一个ToDictionary带两个表达式树(和目前为止的查询)的重载,并将它们组合成一个新的表达式树来创建一个键/值对,然后将其传递给Select,之后调用正常ToDictionary.如果你只做一次这样做可能不值得麻烦,但如果你在多个地方做这件事可能会有用.
没有LINQToSQL无法知道Select为你减少.您需要使用匿名类型.见下文.
var dict = (from customer in Customers select new { customer.Id1, customer.Id2 })
.ToDictionary(d => d.Id1, d => d.Id2);
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
121 次 |
| 最近记录: |