我在SQL Server中有三个表:Company,Financial和FinancialHistory。
关系是:
公司 - >金融(1-1)
财务 - > FinancialHistory(1-Many)
生成实体模型后,我想返回一个更大的实体"实体"它包含来自Company和Financial的所有列以及来自FinancialHistory的少数列,以便我可以在前端维护多个GridView的排序。基本上我想避免返回一个动态列表类型,这是我目前所处的位置,我想要一个更强类型的返回类型。
Entity Framework 6中是否有任何功能允许我通过模型图执行此操作,还是必须创建自己的类并将其单独用于模型?类和指令的一个例子会有所帮助。
注意:在分配给GridViews之前,我将FinancialHistory数据展平并在DataTable中创建动态列。
最初这是一个使用PIVOT并生成动态列的存储过程,但我想将其移到EF并使用LINQ。
答案 0 :(得分:1)
查询时,您可以将结果投影到任何类型。虽然该类型不可更新(您需要直接修改实体类型),但在查询时它的效果非常好。
var res = await (from cpy in myDbContent.Companies
// get two newest financial results
let fin = cpy.financials
let finResRecent = fin.History.OrderByDescending(h => h.FinancialYear)
let finResLast = finResRecent.FirstOrDefault()
let finResPrev = finResRecent.Skip(1).FirstOrDefault()
select new {
Company = cpy,
Financials = fin,
LastResults = finResLast,
PreviousResults = finresPrev
}
).ToListAsync();
(在查询中,许多运算符 - 例如Single
- 无法使用,但FirstOrDefault
可以)