我刚刚开始了解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;
能够使用第一种方法的意义重大。我们有一个解决方法,但它可能会在某些情况下引起并发症(尽管没有不可克服的)。
第一种方式是否有效,或者我们是否需要按照第二种方法概述的方式过滤产品?
答案 0 :(得分:1)
我认为你在这里有TPH继承。 查询TPH映射中的类型如下:
var query =
from lodge in context.Lodgings.OfType<Resort>()
select lodge;
摘录来自编程实体框架第392页
你还考虑过OfType吗?