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

时间:2015-05-14 16:55:38

标签: linq c#-4.0 linq-to-entities

我有一个Schemas的集合,其中每个架构都有NameId和其他几个属性。我只需要预测每个Name的{​​{1}}和Id,因此我在LINQ查询中创建一个匿名类型,如下所示:

Schema

我需要将通过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>() 重载中访问匿名类型?

我应该用{<1}}类型参数替换?

我有其他方法可以做到这一点,但我想知道是否可以通过访问匿名类型以这种方式完成。任何其他很好的方法也是受欢迎的。

1 个答案:

答案 0 :(得分:4)

您可以完全忽略类型参数。

(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);