通过LINQ到实体查询预取继承实体的成员
我想问这个问题最简单的方法是举个例子:假设我有一个实体框架模型,其中有一个“Order”实体,它有一个“OrderLines”集合。“OrderLines”集合表面上是OrderLine对象的集合,但我在这里使用的是继承,因此集合中对象的实际类型将是NoteOrderLine、ItemOrderLine等。此外,ItemOrderLine实体具有关联的“Item”实体 我希望能够基于“Order”实体创建一个LINQ查询,预取“OrderLines”集合,以及在“OrderLine”实体实际上是“ItemOrderLine”类型的情况下预取“Item”实体。有人发现了吗通过LINQ到实体查询预取继承实体的成员,linq,entity-framework,Linq,Entity Framework,我想问这个问题最简单的方法是举个例子:假设我有一个实体框架模型,其中有一个“Order”实体,它有一个“OrderLines”集合。“OrderLines”集合表面上是OrderLine对象的集合,但我在这里使用的是继承,因此集合中对象的实际类型将是NoteOrderLine、ItemOrderLine等。此外,ItemOrderLine实体具有关联的“Item”实体 我希望能够基于“Order”实体创建一个LINQ查询,预取“OrderLines”集合,以及在“OrderLine”实体实际上是
非常感谢。您可以使用投影:
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
时可以合并nulli
您也可以对实体类型执行此操作,但它是不同的。由于您没有给出您试图编写的代码类型的示例,我猜。谢谢您的回复,克雷格。就你们所知,不使用投影就无法完成我的要求?或者这就是你所说的“你可以用实体类型来做这个…”的意思吗?我不太确定。但可以通过投影实体类型来返回实体类型。因为实体框架修复了查询中返回的所有实体的引用,包括投影的一部分中的实体也将使其显示在其他部分中。因此,例如,如果您将
项
投射到某个地方,它也会显示为项医嘱行
的属性。