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

C# LINQ to Entities - Select specified Data from two tables, populate existing Model Classes

我有一个数据库,正在使用 C# LINQ to Entities using Query Syntax。

每个数据库 table 都有自己的 Entity Framework 生成模型 class,数据库 table 和模型 class 被命名为 ReleaseVersion (还有其他但这是我的直接问题).

我正在尝试根据查询将特定数据加载到这些模型 classes 中。

基本上我想要每个 Release 列和行,连同其关联的 Version 记录填充在导航 属性 Release.Versions.

但是,这里有两个关键点:

1) 我只想从查询 中填充某些 'Version' 属性 (我只需要在概览页面中使用一些数据 - 如果我不使用它,我看不到拖回所有数据(可能相当大)的意义)。

2) 我希望查询填充发布和版本的现有模型 classes。 (Release.Versions 导航 属性 正在使用上面第 1 点中精心挑选的数据的版本记录进行填充)

所有这些我都可以使用存储过程以冗长的方式完成 - 没问题,但我认为 EF Linq 会更快。哈。哈。哈哈。

所以:

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} - 但我记不住怎么做,或者如何让它填充导航属性 VersionsRelease class。

也许使用 Lambda 语法??????

编辑:

好的,看来我做不到我认为我能做的事。 因此,我不会使用查询语法,因为我能找到的大多数教程和文档都在方法语法中。另外,我认为 Include 仅适用于 Method 语法,因此使用 Query Syntax 似乎毫无意义。

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

如果你想查询 return 模型 class 使用嵌套版本 class 发布,你可以这样做:

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

您可以使用 Include 方法简单地为您的 table 加载 'foreign' 条记录。

var x = context.Releases.Include("Versions").ToList();