Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/linq/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Linq 如何使用IQueryable<;T>;。包括继承权_Linq_Entity Framework_Linq To Entities_Ef Code First - Fatal编程技术网

Linq 如何使用IQueryable<;T>;。包括继承权

Linq 如何使用IQueryable<;T>;。包括继承权,linq,entity-framework,linq-to-entities,ef-code-first,Linq,Entity Framework,Linq To Entities,Ef Code First,我想我使用了TPT继承。我有一个抽象的父类和三个子类。我想要的是一个基本的find函数,但我需要显式地执行includes。我的问题是如何根据类型包含不同的属性 public List<RandomObject> FindAll(int someProperty) { using (MyContext db = new MyContext()) { var randomObjects = db.RandomObjects.Where(x => x

我想我使用了TPT继承。我有一个抽象的父类和三个子类。我想要的是一个基本的find函数,但我需要显式地执行includes。我的问题是如何根据类型包含不同的属性

public List<RandomObject> FindAll(int someProperty)
{
    using (MyContext db = new MyContext())
    {
        var randomObjects = db.RandomObjects.Where(x => x.SomeProperty == someProperty);
    }
}
公共列表FindAll(int someProperty)
{
使用(MyContext db=new MyContext())
{
var randomObjects=db.randomObjects.Where(x=>x.SomeProperty==SomeProperty);
}
}
RandomObject的每个实例都有一个抽象超类的集合。有固定数量的已知子类(如果人们需要名称,我们可以称它们为subassa和subassb)

我一直在尝试各种Include语句,例如

randomObjects = randomObjects.Include(x => x.Superclasses.OfType<SubclassA>().SubclassAOnlyProperty);
randomObjects=randomObjects.Include(x=>x.Superclasses.OfType().subassonlyproperty);

如果有任何需要澄清的地方,请告诉我,我肯定可以用我尝试过的各种方法来填补这篇文章。

类似的方法可能会奏效:

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();
var result=MyContext.randomObjects
.选择(r=>new
{
RandomObj=r,
SuperclassesOfTypeA=r.Superclasses.OfType()。选择(subA=>new{
obj=subA,
SubcasaOnlyProperty=subA.SubcasaOnlyProperty
}),
所有超类=r.超类
})
.ToList();

我认为这将为您提供一个匿名对象的内存集合,其中,
RandomObj
将是主要对象,
SuperclassesOfTypeA
将是一个匿名对象集合,表示subassa类型的超类,带有subassonlyproperty,还有一个很好的度量,就是你所有其他超类的集合

类似的方法可能会奏效:

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();
var result=MyContext.randomObjects
.选择(r=>new
{
RandomObj=r,
SuperclassesOfTypeA=r.Superclasses.OfType()。选择(subA=>new{
obj=subA,
SubcasaOnlyProperty=subA.SubcasaOnlyProperty
}),
所有超类=r.超类
})
.ToList();

我认为这将为您提供一个匿名对象的内存集合,其中,
RandomObj
将是主要对象,
SuperclassesOfTypeA
将是一个匿名对象集合,表示subassa类型的超类,带有subassonlyproperty,还有一个很好的度量,就是你所有其他超类的集合

既然我的最终目标是拥有一个带有列表的随机对象,该列表是子类列表的串联,那么我该如何结束它呢?现在我只是从result.RandomObj创建一个RandomObject,然后将List属性设置为result.subassalist、result.subassblist等的串联。这看起来很混乱,但这是最好的方法吗?@opticaldulsion-我真的不确定。我想你应该把这个问题作为一个新问题来问。既然我的最终目标是拥有一个包含子类列表的列表的RandomObject,那么我该如何结束这个问题呢?现在我只是从result.RandomObj创建一个RandomObject,然后将List属性设置为result.subassalist、result.subassblist等的串联。这看起来很混乱,但这是最好的方法吗?@opticaldulsion-我真的不确定。我认为你应该把这个问题作为一个新问题来问。
包括
和继承不能很好地结合在一起。简单的建议是不要在单个查询中使用
Include
来获取多个派生类型的关系,尤其不要在TPT中使用
Include
(直到.NET 4.5出炉)。那么,在延迟/急切加载方面,我有什么选择呢?我需要的数据是这个抽象子类的列表,这个数据包括几个特定于某些子类的关系。如何在不诉诸
Include
的情况下检索此TPT数据?
Include
和继承不能很好地结合在一起。简单的建议是不要在单个查询中使用
Include
来获取多个派生类型的关系,尤其不要在TPT中使用
Include
(直到.NET 4.5出炉)。那么,在延迟/急切加载方面,我有什么选择呢?我需要的数据是这个抽象子类的列表,这个数据包括几个特定于某些子类的关系。我如何检索此TPT数据而不诉诸
Include