如何在父级和子级同时应用筛选器来获取子级集合
本文关键字:筛选 集合 获取 应用 | 更新日期: 2023-09-27 18:11:50
我正在使用nHibernate从Sql Server数据库检索订单(及其订单行)的集合。
这是我的ShipmentOrder类:
public class ShipmentOrder
{
private ICollection<ShipmentDetail> _ShipmentsDetails;
public virtual ReadOnlyCollection<ShipmentDetail> ShipmentsDetails
{
get { return (new List<ShipmentDetail>(_ShipmentsDetails).AsReadOnly()); }
}
}
nHibernate返回一个装载了所有细节(ShipmentsDetails)的列表(因为我是Eager加载它们)。
现在,我想过滤我的ShipmentOrder和ShipmentDetail集合,并返回一个ShipmentDetail集合。
我试过这样做:
IList<ShipmentOrder> Results;
// Fetch orders using nHibernate
Results = FetchOrders();
var shipmentLines = Results
.Where(x => x.Company == "XXX" && x.OrderNumber == "111")
.SelectMany(x => x.ShipmentsDetails)
.Where(s => s.RowNumber == 1 && s.RowSeq == 0)
.ToList();
但是我已经意识到我得到了同一行的多个结果。
我把lambda表达式转换成这样:
var shipmentLines = Results
.Where(x => x.Company == "XXX" && x.OrderNumber == "111")
.SelectMany(x => x.ShipmentsDetails)
.Where(s => s.RowNumber == 1 && s.RowSeq == 0)
.Distinct()
.ToList();
,它工作得很好。我想知道如果没有不同的,是否有更好的方法来实现相同的结果。
:
我在这里使用SelectMany,因为这是我发现将过滤器应用于子(ShipmentsDetails)的唯一方法。
这看起来像Linq2Objects,因此IList Results包含重复的记录,可能您对深层进行了渴望抓取,不幸的是导致重复的根实体。在查询