我有一个数据库,正在使用 C# LINQ to Entities using Query Syntax。
每个数据库表都有它自己的 Entity Framework 生成的模型类,数据库表和模型类被命名为Release
和 Version
(还有其他问题,但这是我眼前的问题)。
我正在尝试根据查询将特定数据加载到这些模型类中。
基本上我想要每个 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}
- 但我一辈子都记不起如何去做,或者如何让它填充导航属性 Versions
在 Release
内类(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/