3

如何通过相关属性中的“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()' 方法,并且此方法无法转换为存储表达式。”

4

2 回答 2

2

过滤Orders,然后过滤它们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)))
于 2013-04-28T18:45:21.723 回答
0

如果所讨论的情况没有反转——比如说,没有从“一”到“多”的导航属性,只有另一种方式,而且你无处添加它——使用 可以达到类似的效果Contains

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

var salesOrders = _productionContext.Documents.OfType<SalesOrder>();
var result = OrderLines.Where(o => 
  productIDs.Contains(o.ProductId) 
  && salesOrders.Contains(o.Document));
于 2017-07-31T19:36:19.250 回答