gpt4 book ai didi

c# - linq:ToDictionary 是否减少了返回的列数?

转载 作者:太空狗 更新时间:2023-10-30 00:03:10 28 4
gpt4 key购买 nike

我有一个简单的 Linq 查询:

var dict = (from i in Customers select i).ToDictionary(i => i.Id1, i => i.Id2);

尽管查询说 select iLinq2sql 是否知道将选择减少到两个字段(Id1,Id2)?

最佳答案

没有。 Queryable LINQ to SQL 之类的东西所依赖的类不包含 ToDictionary 的声明(并且没有其他类具有合适的扩展方法)所以它最终使用 Enumerable 中的实现- 即 LINQ to Objects。它使用普通委托(delegate)而不是表达式树,因此它确实没有明智的方法可以计算出所需的内容。

为了提高查询效率,使用匿名类型来捕获您在 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);

另一种选择是自己将此作为扩展方法 - 应该可以编写 ToDictionary 的重载,采用两个表达式树(以及到目前为止的查询),并将它们组合成一个新的表达式树来创建一个键/值对,然后将其传递给 Select,然后调用普通的 ToDictionary。如果您只执行一次此操作可能不值得这么麻烦,但如果您在多个地方执行此操作,它可能会很有用。

关于c# - linq:ToDictionary 是否减少了返回的列数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16088121/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com