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

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

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

每个数据库表都有它自己的 Entity Framework 生成的模型类,数据库表和模型类被命名为ReleaseVersion (还有其他问题,但这是我眼前的问题)

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

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

不过,这里有两个关键点:

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

2) 我希望查询填充已存在的 Release 和 Version 模型类。 (Release.Versions Navigation 属性使用上面第 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 似乎毫无意义。

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

最佳答案

您可以使用 Include 方法简单地为您的表加载“外部”记录。

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

关于C# LINQ to Entities - 从两个表中选择指定的数据,填充现有的模型类,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38173859/

相关文章:

c# .net core linq toEntity异步调用终止程序

c# - 使用 C# 从 IP 地址中删除前导零

c# - UWP 使用中的 SecureString

c# - RelayCommand 与 EventToCommand

asp.net-mvc-3 - 包含自身作为 ICollection 的实体

c# - 简单的 LINQ to Entities 更新抛出 'Timeout expired'

linq - linq 为存储过程的两次不同执行返回相同的数据?

c# - 在通过敲击键盘上的 Enter 触发点击事件之前,我可以使用哪个事件来触发对标签的更新?

c# - Visual Studio for Mac 上出现奇怪的 linq 异常

linq - Entity Framework T-Sql "having"等效