【问题标题】:Returning the results of a LINQ query as a complex model将 LINQ 查询的结果作为复杂模型返回
【发布时间】:2021-11-10 14:31:05
【问题描述】:

我有以下 LINQ 查询,我想将其作为具有相关连接等的模型返回。

      var query = (from wi in context.WorkItems
                     join mi in context.MaintenanceItems
                         on new { Id = wi.MaintenanceItemID }
                         equals new { Id = mi.MaintenanceItemID }
                     join p in context.Properties 
                         on new { Id = mi.PropertyID }
                         equals new { Id = p.PropertyID }
                     join l in context.Locations 
                          on new { Id = p.LocationID }
                          equals new { Id = l.LocationID }
                     join c in context.Categories 
                          on new { Id = mi.CategoryID }
                          equals new { Id = c.CategoryID }
                     join sc in context.SubCategories 
                          on new { Id = mi.SubCategoryID }
                          equals new { Id = sc.SubCategoryID }
                     join pl in context.PickLists 
                          on new { Id = wi.PriorityFlag, V = "Priority" }
                          equals new { Id = pl.ValueKey, V = pl.ValueType }
                     where wi.AssignedTo1 == username           
                    orderby wi.PriorityFlag descending, wi.PriorityIndex, wi.WorkItemID 
                    select new {
                        wi.WorkItemID, 
                        wi.PriorityFlag,
                        wi.PriorityIndex,
                        wi.CompletionDateTime,
                        l.LocationName,
                        p.PropertyFullName ,
                        wi.AssignedTo1,
                        wi.AssignedTo2,
                        wi.AssignedTo3,
                        c.CategoryName,
                        sc.SubCategoryName,
                        PriorityDesc = pl.ValueTitle 
                    });

我的模型包含一个 WorkItem 实体,查询可以返回多个实体,然后相关实体填写所有外键的描述性值等。

显然使用查询我创建了一个匿名类型,但我不确定如何将其转回我需要的完全充实的已知类型?

【问题讨论】:

    标签: c# asp.net entity-framework


    【解决方案1】:

    我创建了一个匿名类型,但我不确定如何将其转回我需要的完全充实的已知类型?

    不要将所选元素投影到新类型中,而是在结果中使用 Eager LoadingInclude() 的全部相关实体。

    您还可以投影整个实体,而不是在匿名类型中投影单个标量属性。

    【讨论】:

    • 我正在这样做,但我有一个共享引用表(代码中的 PickLists),我在其中存储多组引用/查找数据 - 我似乎无法使用 Include() 来做到这一点这就是我使用手动构建查询的原因。
    • 查看更新的答案。并考虑使用 Table-Per-Hierarchy 继承将 PickLists 建模为单独的实体。它在数据库中也确实是一种反模式,但您有时可以在 EF 中修复它。
    • 谢谢 - 即使我返回整个实体,查询的结果不会仍然是匿名类型吗?我正在研究 TPH,但如果我有一个包含 ValueType(鉴别器)、ValueKey 和 ValueDescription 列的通用表,例如,我如何将它链接到一个包含名为 PriorityID 的列的表?
    • 您将创建一个实体Priority : PickList,然后为该实体创建一个导航属性,将PriorityId 配置为外键属性。或者在数据库中为不同的查找创建一堆视图,或者(甚至更好)创建单独的表。您甚至可以保留单个 PickList 表,并使用它来更新单独的参考表。
    • 你知道我认为我可以按照建议拆分表格。我似乎无法解决导航属性 - 我看到建议的 HasForeignKey 选项,但目前甚至无法让它工作。
    猜你喜欢
    • 1970-01-01
    • 2014-08-03
    • 1970-01-01
    • 1970-01-01
    • 2016-09-30
    • 1970-01-01
    • 1970-01-01
    • 2010-09-25
    • 1970-01-01
    相关资源
    最近更新 更多