linq - Entity Framework 、每种类型的表和 Linq - 获取 "Type"

我有一个名为 Product 的抽象类型,以及五个从 Product 继承的“类型”,每个类型层次结构如下所示:

我想获取所有产品的所有信息,包括从产品继承的不同对象的一些属性,以将它们转换到新类中以在 MVC 网页中使用。我的 linq 查询如下:

     //Return the required products
    var model = from p in Product.Products
                where p.archive == false && ((Prod_ID == 0) || (p.ID == Prod_ID))
                select new SearchViewModel 
                    {
                        ID = p.ID,
                        lend_name = p.Lender.lend_name,
                        pDes_rate = p.pDes_rate,
                        pDes_details = p.pDes_details,
                        pDes_totTerm = p.pDes_totTerm,
                        pDes_APR = p.pDes_APR,
                        pDes_revDesc = p.pDes_revDesc,
                        pMax_desc = p.pMax_desc,
                        dDipNeeded = p.dDipNeeded,
                        dAppNeeded = p.dAppNeeded,      

                        CalcFields = new DAL.SearchCalcFields
                        {
                            pDes_type = p.pDes_type,
                            pDes_rate = p.pDes_rate,
                            pTFi_fixedRate = p.pTFi_fixedRate 
                        }
                    }

我遇到的问题是访问 p.pTFi_fixedRate,这不会随实体的 Products 集合一起返回,因为它在 Fixed 的父类(super class)型中。如何使用 Linq 和 Entity Framework 返回“ super ”类型的 Products (Fixed) 属性。实际上,我需要从所有不同的父类(super class)型(Disc、Track 等)返回一些字段以用于计算。我是否应该将这些作为单独的 Linq 查询返回,以检查返回的“产品”类型?

最佳答案

这是一个很好的问题。我看过朱莉·勒曼 (Julie Lerman) 的书并在互联网上进行了搜索,但我找不到优雅的答案。

如果是我,我会创建一个数据传输对象,其中包含类型的所有属性,然后对每种类型进行单独的查询,然后将它们联合起来。我会在属性与该类型不相关的 DTO 属性中插入空白。然后我希望 EF 引擎在创建体面的 SQL 方面做出合理的尝试。

例子

var results = (from p in context.Products.OfType<Disc>
        select new ProductDTO {basefield1 = p.val1, discField=p.val2, fixedField=""})
         .Union(
        from p in context.Products.OfType<Fixed>
        select new ProductDTO {basefield1 = p.val1, discField="", fixedField=p.val2});

但这不是最好的答案。还有其他的吗?

关于linq - Entity Framework 、每种类型的表和 Linq - 获取 "Type",我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8975093/

相关文章:

google-chrome - 使用 TFS/NUnit 通过构建过程执行时,使用 Google C

wcf - 检查权限的最佳位置在哪里?

php - 从 php 在计算机上运行脚本

ruby-on-rails - 我应该使用 faker 还是更快的 faker

oop - 得墨忒耳法则和 HashMap

r - ggplot 中的条形图,每组条数不同

wpf - 语音识别 - 未处理的异常 - 未找到 SAPI,即使已安装

haskell - GHCi - 第二次运行时跳过断点

ruby-on-rails - 如何从 Rails 中的模型继承,其中一种类型在不交织的情况下扩展另

rest - 强制 web api 消费者接受响应中的新字段