我有一个数据库,并且正在使用C#LINQ到使用查询语法的实体。
每个数据库表都有其自己的Entity Framework生成的模型类,这些数据库表和模型类分别命名为Release
和Version
(还有其他表,但这是我的直接问题)。
我正在尝试根据查询将特定数据加载到这些模型类中。
本质上,我希望每个Release
列和行,以及其关联的Version
记录都填充在导航属性Release.Versions
中。
但是,这里有两个关键点:
1)我只希望从查询中填充某些“版本”属性
(我只需要一些数据在“概述”页面中使用-如果不使用它,我看不到拖回所有数据的意义(可能相当大))。
2)我想查询填充版本和版本已经存在的模型类。
(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}
-但我一生都无法记住如何操作或如何使它填充Versions
中的Navigation属性Release
。类。也许使用Lambda语法?
编辑:
好的,看来我无法做我想做的事。
因此,我不会使用查询语法,因为我可以在方法语法中找到大多数教程和文档。另外,我认为Include仅适用于Method语法,因此使用查询语法似乎有点毫无意义。
标记为正确的答案是我如何加载导航属性。
最佳答案
您可以简单地使用Include方法为表加载“外来”记录。
var x = context.Releases.Include("Versions").ToList();