我认为我使用TPT继承。我有一个抽象的父类和三个子类。我想要的是一个基本的查找功能,但我需要明确做包含。我的问题是如何根据类型包含不同的属性。
public List<RandomObject> FindAll(int someProperty)
{
using (MyContext db = new MyContext())
{
var randomObjects = db.RandomObjects.Where(x => x.SomeProperty == someProperty);
}
}
RandomObject的每个实例都有一个抽象超类的集合。有一定数量的已知子类(如果人们需要名字,我们可以称之为SubclassA和SubclassB)。
我一直在尝试各种Include语句,例如
randomObjects = randomObjects.Include(x => x.Superclasses.OfType<SubclassA>().SubclassAOnlyProperty);
如果有任何澄清需要让我知道,我绝对可以用我尝试过的各种事情来填补这篇文章。
答案 0 :(得分:0)
这样的事可能有用:
var result = MyContext.randomObjects
.Select(r => new
{
RandomObj = r,
SuperclassesOfTypeA = r.Superclasses.OfType<SubClassA>().Select(subA => new {
obj = subA,
SubclassAOnlyProperty = subA.SubclassAOnlyProperty
}),
AllSuperClasses = r.Superclasses
})
.ToList();
我认为这会给你一个内存中的匿名对象集合,其中RandomObj
将是主要对象,SuperclassesOfTypeA
将是一个匿名对象的集合,代表你的超类类型SubClassA,与SubclassAOnlyProperty 急切加载,并且可以衡量所有其他超类的集合。