C#LINQ to Entities - 从两个表中选择指定的数据,填充现有的模型类

时间:2016-07-03 20:01:37

标签: c# entity-framework linq-to-entities

我有一个数据库,并使用查询语法使用C#LINQ to Entities。

每个数据库表都有自己的实体框架生成的模型类,数据库表和模型类的名称为ReleaseVersion (还有其他但这是我的直接问题)

我试图根据查询将特定数据加载到这些模型类中。

基本上我想要每个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语法,因此使用查询语法似乎有点无意义。

标记为正确的答案是我加载导航属性的方式。

2 个答案:

答案 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();