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)))
答
如果有问题的情况下不具有反转 - 比方说,有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));
= _productionContext .Documents.OfType() .SelectMany(O => o.Lines)。凡(p值=> productIDs.Contains(p.ProductID))ToList(); –
2013-04-28 18:50:36
正确。可能会生成相同的SQL查询。 – 2013-04-28 18:51:53