如何在下一个链接扩展方法中访问 Linq 查询中投影的匿名类型?
How to access anonymous type projected in Linq query in the next chained extension method?
我有一个 Schemas
的集合,其中每个架构都有 Name
、Id
和其他几个属性。我只需要投影每个 Schema
的 Name
和 Id
,因此我在 LINQ 查询中创建了一个匿名类型,如下所示:
from s in db.Schemas
select new { Id = s.SchemaId, Name = s.Name}
我需要将通过 Select
查询运算符投影的上述匿名类型转换为 Dictionary<int,string>
,为此我需要向上述查询添加进一步的扩展方法重载,如下所示:
(from s in db.Schemas
select new { Id = s.SchemaId, Name = s.Name})
.ToDictionary<TSource,int,string>()
现在,如何访问 ToDictionary()
重载中的匿名类型?
我应该用什么替换 TSource
类型参数?
我有其他方法可以做到这一点,但我想知道是否可以通过访问匿名类型以这种方式完成。也欢迎任何其他好的方法来做到这一点。
您可以完全省略类型参数。
(from s in db.Schemas
select new { Id = s.SchemaId, Name = s.Name})
.ToDictionary(p => p.Id, p => p.Name);
编译器可以为您推断出它们。
事实上,您可以一步完成:
db.Schemas.ToDictionary(s => s.SchemaId, s => s.Name);
或者至少坚持使用一种 LINQ 语法:
db.Schemas
.Select(s => new { Id = s.SchemaId, Name = s.Name })
.ToDictionary(p => p.Id, p => p.Name);
我有一个 Schemas
的集合,其中每个架构都有 Name
、Id
和其他几个属性。我只需要投影每个 Schema
的 Name
和 Id
,因此我在 LINQ 查询中创建了一个匿名类型,如下所示:
from s in db.Schemas
select new { Id = s.SchemaId, Name = s.Name}
我需要将通过 Select
查询运算符投影的上述匿名类型转换为 Dictionary<int,string>
,为此我需要向上述查询添加进一步的扩展方法重载,如下所示:
(from s in db.Schemas
select new { Id = s.SchemaId, Name = s.Name})
.ToDictionary<TSource,int,string>()
现在,如何访问 ToDictionary()
重载中的匿名类型?
我应该用什么替换 TSource
类型参数?
我有其他方法可以做到这一点,但我想知道是否可以通过访问匿名类型以这种方式完成。也欢迎任何其他好的方法来做到这一点。
您可以完全省略类型参数。
(from s in db.Schemas
select new { Id = s.SchemaId, Name = s.Name})
.ToDictionary(p => p.Id, p => p.Name);
编译器可以为您推断出它们。
事实上,您可以一步完成:
db.Schemas.ToDictionary(s => s.SchemaId, s => s.Name);
或者至少坚持使用一种 LINQ 语法:
db.Schemas
.Select(s => new { Id = s.SchemaId, Name = s.Name })
.ToDictionary(p => p.Id, p => p.Name);