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

ben*_*ben 1 c# linq lambda entity types

好吧,忍受我...直到几天前没有做过任何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;
Run Code Online (Sandbox Code Playgroud)

(抱歉格式化)

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

{System.Data.Objects.ObjectQuery<<>f__AnonymousType1<MyApp.Models.Achievement>>}
Run Code Online (Sandbox Code Playgroud)

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

{System.Data.Objects.ObjectQuery<MyApp.Models.Achievement>}
Run Code Online (Sandbox Code Playgroud)

为什么是这样?

干杯,

Jon*_*eet 8

这个位是第一次调用中的问题:

(ach, ao) => new { Achievement = ach }
Run Code Online (Sandbox Code Playgroud)

您正在创建一个具有类型Achievement属性的新匿名类型Achievement.

我怀疑你只想要:

(ach, ao) => ach
Run Code Online (Sandbox Code Playgroud)

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

基本上,每当你看到new { ... }这意味着匿名类型.(不要混淆new[] { ... }哪个构建具有推断元素类型的数组,或者new List<string> { ... }等等将List<string>使用给定内容构建新元素.