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

C# C LINQ到实体-从两个表中选择指定的数据,填充现有模型类,c#,entity-framework,linq-to-entities,C#,Entity Framework,Linq To Entities,我有一个数据库,正在使用C LINQ来访问使用查询语法的实体 每个DB表都有它自己的实体框架生成的模型类,DB表和模型类被命名为Release和Version,还有其他的,但这是我的直接问题 我试图根据查询将特定数据加载到这些模型类中 实际上,我希望在导航属性Release.Versions中填充每个Release列和行及其关联的版本记录 然而,这里有两个关键点: 1我只希望从查询中填充某些“版本”属性 我只需要在概览页面中使用一些数据——如果我不使用这些数据,我看不到将所有数据都拖回的意义,因

我有一个数据库,正在使用C LINQ来访问使用查询语法的实体

每个DB表都有它自己的实体框架生成的模型类,DB表和模型类被命名为Release和Version,还有其他的,但这是我的直接问题

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

实际上,我希望在导航属性Release.Versions中填充每个Release列和行及其关联的版本记录

然而,这里有两个关键点:

1我只希望从查询中填充某些“版本”属性 我只需要在概览页面中使用一些数据——如果我不使用这些数据,我看不到将所有数据都拖回的意义,因为这些数据可能相当大

2我希望查询填充已存在的发布和版本模型类。 Release.Versions导航属性正在填充版本记录,其中包含从上面第1点选取的数据

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

因此:

我就是不懂语法

这就是我所做的,我尝试过许多其他变体,但没有像我记得的那么简单:

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);
我似乎记得必须使用selectnewrelease{x,y,z},然后使用嵌套的新版本{x,y,z}——但我一辈子都记不起如何做,或者如何让它填充Release类中的导航属性版本

可能使用Lambda语法

编辑:

好吧,看来我不能做我认为我能做的事。 所以,我不打算使用查询语法,因为我能找到的大多数教程和文档都是方法语法。另外,我认为Include只适用于方法语法,所以使用查询语法似乎有点毫无意义


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

如果希望查询返回带有嵌套版本类的模型类版本,可以这样做:

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

如果希望查询返回带有嵌套版本类的模型类版本,可以这样做:

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方法为表加载“外部”记录

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

您可以使用Include方法为表加载“外部”记录

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

版本的可能副本没有导航属性版本?Gert Arnold>>是,但未填充…版本的可能副本没有导航属性版本?Gert Arnold>>是,但未填充…否。您不能在EF查询中新建实体对象。@GertArnold根据我从问题中了解到的情况,模型类版本是DTO而不是实体对象。DTO可以像我在回答中那样创建。不。您不能在EF查询中新建实体对象。@GertArnold根据我从问题中了解到的情况,模型类版本是DTO而不是实体对象。DTO可以像我在回答中所做的那样创建。