Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/image/5.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到实体查询预取继承实体的成员_Linq_Entity Framework - Fatal编程技术网

通过LINQ到实体查询预取继承实体的成员

通过LINQ到实体查询预取继承实体的成员,linq,entity-framework,Linq,Entity Framework,我想问这个问题最简单的方法是举个例子:假设我有一个实体框架模型,其中有一个“Order”实体,它有一个“OrderLines”集合。“OrderLines”集合表面上是OrderLine对象的集合,但我在这里使用的是继承,因此集合中对象的实际类型将是NoteOrderLine、ItemOrderLine等。此外,ItemOrderLine实体具有关联的“Item”实体 我希望能够基于“Order”实体创建一个LINQ查询,预取“OrderLines”集合,以及在“OrderLine”实体实际上是

我想问这个问题最简单的方法是举个例子:假设我有一个实体框架模型,其中有一个“Order”实体,它有一个“OrderLines”集合。“OrderLines”集合表面上是OrderLine对象的集合,但我在这里使用的是继承,因此集合中对象的实际类型将是NoteOrderLine、ItemOrderLine等。此外,ItemOrderLine实体具有关联的“Item”实体

我希望能够基于“Order”实体创建一个LINQ查询,预取“OrderLines”集合,以及在“OrderLine”实体实际上是“ItemOrderLine”类型的情况下预取“Item”实体。有人发现了吗


非常感谢。

您可以使用投影:

var q = from o in Context.Orders
        select new
        {
            Customer = o.CustomerName,
            Lines = from l in o.Lines
                    let i = l as ItemOrderLine
                    select new
                    {
                       Quantity = l.Quantity,
                       Item = i.Item.Name,
                       ItemNo = (int?) i.Item.Number // Note below
                    }
         };
l
类型为
NoteOrderLine
时,
i
将为空。由于
int
不可为null,因此必须将其强制转换为
int?
,以便在设置
ItemNo
时可以合并null
i


您也可以对实体类型执行此操作,但它是不同的。由于您没有给出您试图编写的代码类型的示例,我猜。

谢谢您的回复,克雷格。就你们所知,不使用投影就无法完成我的要求?或者这就是你所说的“你可以用实体类型来做这个…”的意思吗?我不太确定。但可以通过投影实体类型来返回实体类型。因为实体框架修复了查询中返回的所有实体的引用,包括投影的一部分中的实体也将使其显示在其他部分中。因此,例如,如果您将
投射到某个地方,它也会显示为
项医嘱行
的属性。