【问题标题】:Entity Framework - How to return a strongly typed object containing multiple Entities?实体框架 - 如何返回包含多个实体的强类型对象?
【发布时间】:2018-03-19 22:26:16
【问题描述】:

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

关系是:

公司 -> 财务 (1-1)
财务 -> 财务历史(1-多)

生成实体模型后,我想返回一个更大的“实体”,其中包含公司和财务中的所有列以及 FinancialHistory 中的一些列,以便我可以在前端的多个 GridView 中保持排序。基本上我想避免返回我当前所在的动态 List 类型,我想要一个更强类型的返回类型。

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

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

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

【问题讨论】:

  • 看到你的最后一句话(pivot),一切的答案都是:没有。但我们需要MCVE 提供更明确的帮助。

标签: asp.net entity-framework-6


【解决方案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可以)

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-08-31
    • 2020-12-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多