使用OfType <t>过滤包含的对象,对于特定的ThenInclude,按类型T进行过滤

时间:2018-01-15 13:02:18

标签: c# linq

考虑课程:

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开始?

0 个答案:

没有答案