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 被命名为 Release
和 Version
(还有其他但这是我的直接问题).
我正在尝试根据查询将特定数据加载到这些模型 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}
- 但我记不住怎么做,或者如何让它填充导航属性 Versions
内 Release
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();
我有一个数据库,正在使用 C# LINQ to Entities using Query Syntax。
每个数据库 table 都有自己的 Entity Framework 生成模型 class,数据库 table 和模型 class 被命名为 Release
和 Version
(还有其他但这是我的直接问题).
我正在尝试根据查询将特定数据加载到这些模型 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}
- 但我记不住怎么做,或者如何让它填充导航属性 Versions
内 Release
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();