我有一个数据库,并使用查询语法使用C#LINQ to Entities。
每个数据库表都有自己的实体框架生成的模型类,数据库表和模型类的名称为Release
和Version
(还有其他但这是我的直接问题)
我试图根据查询将特定数据加载到这些模型类中。
基本上我想要每个Release
列&行,以及在导航属性Version
中填充的关联Release.Versions
记录。
然而,这里有两个关键点:
1)我只想要某些版本'要从查询中填充的属性 (我只需要在概述页面中使用一些数据 - 如果我不使用它,我无法看到拖回所有数据(可能相当大))。
2)我希望查询填充Release和Version的现有Model类。 (Release.Versions Navigation属性使用上面第1点的樱桃挑选数据填充版本记录)
所有这一切我都可以通过存储过程以漫长的方式进行 - 没有问题,但是认为EF Linq会更快。哈。哈。 Haaaa。
所以:
Release.ID <---- Primary Key
Release.Col_1 <---- Other Properties (or columns)
Release.Col_2
Release.Col_3
Release.Versions <---- Navigation Property to collection of Version records for each Release.
Version.ID <---- Primary Key
Version.Release_ID <---- Foreign Key to Release Table
Version.Col_1 <---- Many properties, just want first 4 properties obtained from DB.
Version.Col_2
Version.Col_3
Version.Col_4
Version.Col_5
Version.Col_x...
我无法正确使用语法。
这就是我所拥有的(我已经尝试了许多其他变体,但没有像我记得的那样简单):
var query = (from r in context.Releases
join v in context.Versions on r.ID equals v.Release_ID
select r).ToList();
returnedRecords= new ObservableCollection<Model.Release>(query);
我似乎记得必须使用select new Release { x,y,z }
然后使用嵌套的new Version { x, y, z}
- 但在我的生活中不能记住如何做到这一点,或者如何让它来填充Navigation属性{在Versions
课程中{1}}。
也许使用Lambda语法???????
修改
好吧,看来我不能做我认为我能做的事情。 所以,我不打算使用查询语法,因为我能找到的大多数教程和文档都在方法语法中。另外我认为Include仅适用于Method语法,因此使用查询语法似乎有点无意义。标记为正确的答案是我加载导航属性的方式。
答案 0 :(得分:3)
你可以简单地加载“外国人”&#39;使用Include方法为您的表创建记录。
var x = context.Releases.Include("Versions").ToList();
答案 1 :(得分:2)
如果您希望查询返回带有嵌套版本类的模型类Release,您可以这样做:
var query = (from r in context.Releases
join v in context.Versions on r.ID equals v.Release_ID
select new Release
{
releaseColumn1 = r.releaseColumn1,
releaseColumn12 = r.releaseColumn2,
releaseVersion = new Version
{
versionColumn1 = v.versionColumn1,
versionColumn2 = v.versionColumn2
}
}).ToList();