为什么我的Lambda查询返回匿名类型与Linq的强类型返回值?

时间:2010-10-03 19:30:49

标签: c# linq lambda types entity

好的,忍受我......直到几天前还没有做任何Linq或Lambda:)

我正在使用C#和ADO.NET实体框架。我想查询我的模型并根据关系返回一个对象列表。

这是我的代码:

var query = db.Achievements.Join
 (
 db.AchievementOrganisations,
 ach => ach.AchievementId,
 ao => ao.AchievementId,
 (ach, ao) => new { Achievement = ach }
 );

var query2 = from s in db.Achievements
 join h in db.AchievementOrganisations
 on s.AchievementId equals h.AchievementId
 select s;

(抱歉格式化)

我的问题是为什么第一个查询(我认为是Lambda表达式)返回匿名类型:

{System.Data.Objects.ObjectQuery<<>f__AnonymousType1<MyApp.Models.Achievement>>}

...但是第二个查询(LINQ查询)我得到一个强类型值:

{System.Data.Objects.ObjectQuery<MyApp.Models.Achievement>}

为什么会这样?

干杯,

1 个答案:

答案 0 :(得分:8)

这是第一次通话中的问题:

(ach, ao) => new { Achievement = ach }

您正在创建一个新的匿名类型,其Achievement属性类型为Achievement

我怀疑你只是想要:

(ach, ao) => ach

...虽然进行联接并忽略您正在加入的表格有点奇怪。

基本上,每当您看到new { ... }表示匿名类型时。 (不要与使用推断元素类型构建数组的new[] { ... }或使用给定内容构建新new List<string> { ... }的{​​{1}}等混淆。