如何通过相关属性中的“OfType”过滤LINQ查询?
示例:我正在OrderLines集合中搜索包含匹配的productID列表中的产品的订单行。我想用contains来完成这个:
OrderLines.Where(o => productIDs.contains(o.ProductID))
但是,我只想选择与SalesOrder相关的订单行,而不是选择采购订单。因此OrderLines.Document
需要ofType<SalesOrder>
如何将其用于linq查询?
我尝试了getType但是出现了这个错误: “LINQ to Entities无法识别方法'System.Type GetType()'方法,并且此方法无法转换为商店表达式。”
答案 0 :(得分:2)
过滤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)))
答案 1 :(得分:0)
如果有问题的情况没有反转 - 比如,没有从“一个”到“多个”的导航属性,只有另一种方式,并且你没有地方可以添加它 - 使用Contains
可以实现类似的效果。
假设在此示例中,Lines
上没有Document
属性。
var salesOrders = _productionContext.Documents.OfType<SalesOrder>();
var result = OrderLines.Where(o =>
productIDs.Contains(o.ProductId)
&& salesOrders.Contains(o.Document));