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)
为什么是这样?
干杯,
本
这个位是第一次调用中的问题:
(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>使用给定内容构建新元素.