使用LINQ查询存储在基类表中的具体类

时间:2015-03-19 19:03:26

标签: c# linq entity-framework-6

我刚刚开始了解LINQ查询。我查看了MSDN page about type relationships,了解了查询的基本知识。但是,当EF6(代码优先)基于基类将一些具体类合并到一个表中时,我找不到任何可以帮助我查询的内容。

我有一个像这样声明的基本抽象类:

public abstract class Product
{
    // a whole bunch of fields, properties, and methods
}

然后一堆具体的类声明如下:

public class ProductOption : Product
{
    public ProductOption()
    {
        // A bunch of stuff to set properties in the base class.
    }
}

实体框架创建一个名为Products的表,其中包含一个名为Differentiator的列,其中的值标识特定行所包含的具体类的名称(例如ProductOption)。该列不会在Product中创建属性。

我想做的是(按照MSDN示例)声明类似的内容:

var queryAllProductOptions = from po in ProductOptions
                             select po;

我从至少一个人那里听说过我需要过滤,看起来像这样(幸运的是我们有一个有帮助的属性):

var queryAllProductOptions = from po in Products
                             where po.Category = ProductCategory.Option
                             select po;

能够使用第一种方法的意义重大。我们有一个解决方法,但它可能会在某些情况下引起并发症(尽管没有不可克服的)。

第一种方式是否有效,或者我们是否需要按照第二种方法概述的方式过滤产品?

1 个答案:

答案 0 :(得分:1)

我认为你在这里有TPH继承。 查询TPH映射中的类型如下:

var query =
    from lodge in context.Lodgings.OfType<Resort>()
    select lodge;

摘录来自编程实体框架第392页

你还考虑过OfType吗?