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

时间:2010-01-29 19:56:54

标签: linq entity-framework

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

我希望能够做的是创建基于“Order”实体的LINQ查询,预取“OrderLines”集合,以及在“OrderLine”实体是的情况下预取“Item”实体实际上是“ItemOrderLine”类型。有没有人想到这个?

非常感谢。

1 个答案:

答案 0 :(得分:2)

您可以使用投影:

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
                    }
         };
i类型为l时,

NoteOrderLine将为空。由于int不可为空,我们必须将其转换为int?,以便在设置i时可以合并空ItemNo

您也可以使用实体类型执行此操作,但它不同。既然你没有给出你想写的那种代码的例子,我猜想。