LINQ查询相关属性中的ofType

问题描述:

如何通过相关属性中的“OfType”过滤LINQ查询?LINQ查询相关属性中的ofType

示例:我在OrderLines集合中搜索包含productID匹配列表中的产品的订单项。我想用含有做到这一点:

OrderLines.Where(o => productIDs.contains(o.ProductID)) 

不过,我想只能选择相关的SalesOrder,而不是一个采购订单orderlines。所以OrderLines.Document将需要ofType<SalesOrder>

我如何工作到linq查询?

我尝试的getType但得到这个错误:“LINQ实体无法识别方法‘的System.Type的GetType()’方法,和这种方法不能被翻译成存储表述”

滤波器Order秒,然后他们OrderLine S:

from o in Orders.OfType<SalesOrder>() 
from ol in o.OrderLines.Where(ol => productIDs.Contains(ol.ProductID)) 

这是一样的

Orders.OfType<SalesOrder>().SelectMany(o => 
     o.OrderLines.Where(ol => productIDs.Contains(ol.ProductID))) 
+0

= _productionContext .Documents.OfType () .SelectMany(O => o.Lines)。凡(p值=> productIDs.Contains(p.ProductID))ToList(); – 2013-04-28 18:50:36

+0

正确。可能会生成相同的SQL查询。 – 2013-04-28 18:51:53

如果有问题的情况下不具有反转 - 比方说,有ISN从“one”到“many”的导航属性,只有另一种方式,并且您无法添加它 - 使用Contains可以实现类似的效果。

假设在这个例子中,Document上没有Lines属性。

var salesOrders = _productionContext.Documents.OfType<SalesOrder>(); 
var result = OrderLines.Where(o => 
    productIDs.Contains(o.ProductId) 
    && salesOrders.Contains(o.Document));