SQL Server 데이터베이스에서 주문 컬렉션 (및 주문 라인)을 검색하는 데 nHibernate를 사용하고 있습니다.부모와 자식 모두에 필터를 적용하는 자식 컬렉션을 가져 오는 방법
이 클래스 내 ShipmentOrder입니다 :
public class ShipmentOrder
{
private ICollection<ShipmentDetail> _ShipmentsDetails;
public virtual ReadOnlyCollection<ShipmentDetail> ShipmentsDetails
{
get { return (new List<ShipmentDetail>(_ShipmentsDetails).AsReadOnly()); }
}
}
nHibernate 수는 모든 세부 사항 (ShipmentsDetails)와은 IList를 반환로드 (I 열망 부하 그 이후부터).
이제 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();
그러나 나는 같은 라인의 여러 결과를 얻을 수 있음을 깨달았다.
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();
을하고 그것을 잘 작동합니다 :
나는이 같은 람다 식을 변환했습니다. 이없는 동일한 결과를 얻는 더 좋은 방법이 있는지 궁금합니다.
UPDATE : 나는 SelectMany를 사용하고
여기 이것이 내가 아이들 (ShipmentsDetails)에 필터를 적용하기 위해 찾은 유일한 방법입니다 원인이된다.
'Distinct'를 사용하지 않고 별개의 목록을 원하십니까? – Jamiec
@Jamiec : 포함 된 샘플 코드는 한 행을 반환해야하지만 4 개의 행이 있으므로 4 개의 주문이 있습니다. 나는 SelectMany 원인을 사용하고 있는데 그것은 children 컬렉션에 필터를 적용하는 유일한 방법이다. – LeftyX
'x => x.Company == "XXX"&& x.OrderNumber == "111"'단일 ShipmentOrder를 식별합니까? 그렇다면's.RowNumber == 1 && s.RowSeq == 0'은 하나의'ShipmentLine'을 식별합니까? 이 쿼리의 예상 결과는 무엇입니까? – Jamiec