如何在下一个链接扩展方法中访问 Linq 查询中投影的匿名类型?

How to access anonymous type projected in Linq query in the next chained extension method?

我有一个 Schemas 的集合,其中每个架构都有 NameId 和其他几个属性。我只需要投影每个 SchemaNameId,因此我在 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);