繁体   English   中英

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

[英]Why does my Lambda query return an anonymous type versus Linq's strongly-typed return value?

好吧,忍受我...直到几天前才做过任何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>}

为什么是这样?

干杯,

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

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

您正在创建一个新的匿名类型与Achievement型物业Achievement

我怀疑你只是想要:

(ach, ao) => ach

...尽管进行联接并忽略要与之联接的表有点奇怪。

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM