考虑课程:
public class MainObject
{
List<Base> myList;
}
public class Base
{
int MainObjectId;
int x;
}
public class A : Base
{
int y;
}
public class B : Base
{
int z;
AnotherObject anotherObject;
}
使用这样的配置我想根据MainObject.myList中元素的类型包含不同的东西
我尝试过类似的东西:
var result = context.mainObjects
.Include(mo => mo.myList.OfType<A>())
.Include(mo => mo.myList.OfType<B>()).ThenInclude(b => b.anotherObject)
.Where (mo => mo.Id == paramId)
.FirstOrDefault();
然后我尝试了2个不同的查询:
var resultForA = context.mainObjects
.Include(mo => mo.myList.OfType<A>())
..Where(mo => mo.Id == paramId)
.FirstOrDefault();
var resultForB = context.mainObjects
.Include(mo => mo.myList.OfType<B>()).ThenInclude(b => b.anotherObject)
..Where(mo => mo.Id == paramId)
.FirstOrDefault();
它都不起作用。
有没有办法使用OfType过滤包含的对象,以根据类型包含特定的子包含?
编辑:我已经通过做这样的事情解决了这个问题
var ListOfA = context.BaseObjects
.OfType<A>()
.Where(a => a.MainObjectId == id)
.ToList();
var ListOfB = context.BaseObjects.Include(b => b.anotherObject)
.OfType<B>()
.Where(b => b.MainObjectId == id)
.ToList();
但我仍然想知道是否有办法在一个查询中执行此操作?或者2但是从MainObject开始?