实体框架 - 如何返回包含多个实体的强类型对象?

时间:2018-03-19 14:18:48

标签: asp.net entity-framework-6

我在SQL Server中有三个表:Company,Financial和FinancialHistory。

关系是:

公司 - >金融(1-1)
财务 - > FinancialHistory(1-Many)

生成实体模型后,我想返回一个更大的实体"实体"它包含来自Company和Financial的所有列以及来自FinancialHistory的少数列,以便我可以在前端维护多个GridView的排序。基本上我想避免返回一个动态列表类型,这是我目前所处的位置,我想要一个更强类型的返回类型。

Entity Framework 6中是否有任何功能允许我通过模型图执行此操作,还是必须创建自己的类并将其单独用于模型?类和指令的一个例子会有所帮助。

注意:在分配给GridViews之前,我将FinancialHistory数据展平并在DataTable中创建动态列。

最初这是一个使用PIVOT并生成动态列的存储过程,但我想将其移到EF并使用LINQ。

1 个答案:

答案 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可以)