C# Linq:匹配子对象列表中子对象的属性,并从父对象列表返回父对象
我正试图编写一个Linq查询来返回一个通过匹配其子对象的属性来标识的父对象。我的类是一个销售订单,它有一个交货清单,而交货清单又有一个行项目清单。我希望在交货的LineItems中的Item Number和Line Number属性匹配时返回交货对象 课程:C# Linq:匹配子对象列表中子对象的属性,并从父对象列表返回父对象,c#,linq,C#,Linq,我正试图编写一个Linq查询来返回一个通过匹配其子对象的属性来标识的父对象。我的类是一个销售订单,它有一个交货清单,而交货清单又有一个行项目清单。我希望在交货的LineItems中的Item Number和Line Number属性匹配时返回交货对象 课程: public class SalesOrderDetail { [JsonProperty("SalesOrderNumber")] public string SalesOrderNumber { g
public class SalesOrderDetail
{
[JsonProperty("SalesOrderNumber")]
public string SalesOrderNumber { get; set; }
[JsonProperty("PONumber")]
public string PONumber { get; set; }
[JsonProperty("Status")]
public string Status { get; set; }
[JsonProperty("Deliveries")]
public List<Delivery> Deliveries { get; set; }
}
public class Delivery
{
[JsonProperty("DeliveryDocumentNumber")]
public string DeliveryDocumentNumber { get; set; }
[JsonProperty("DeliveryStatus")]
public string DeliveryStatus { get; set; }
[JsonProperty("Parcels")]
public List<Parcel> Parcels { get; set; }
[JsonProperty("LineItems")]
public List<LineItem> LineItems { get; set; }
[JsonProperty("ShippedDate")]
public DateTime ShippedDate { get; set; }
}
public class LineItem
{
[JsonProperty("DeliveryDocumentLineNumber")]
public int DeliveryDocumentLineNumber { get; set; }
[JsonProperty("OrderLineNumber")]
public int OrderLineNumber { get; set; }
[JsonProperty("ItemNumber")]
public string ItemNumber { get; set; }
[JsonProperty("QuantityOrdered")]
public int QuantityOrdered { get; set; }
[JsonProperty("QuantityPicked")]
public int QuantityPicked { get; set; }
[JsonProperty("QuantityScanned")]
public int QuantityScanned { get; set; }
[JsonProperty("QuantityShipped")]
public int QuantityShipped { get; set; }
[JsonProperty("QuantityCanceled")]
public int QuantityCanceled { get; set; }
[JsonProperty("LineItemDetails")]
public List<LineItemDetail> LineItemDetails { get; set; }
}
我开始思考这个问题的方式是编写以下代码。Intellisense声明它将返回一个类型为Delivery的对象,但是,代码测试会生成异常“Sequence contain no elements”
可能更像是
var matchedDeliveries = salesOrderDetail.Deliveries
.Where(d => d.LineItems.Any(li => li.ItemNumber == itemNumber && li.OrderLineNumber == lineNumber));
或者,如果您想要一个交付交换,则首先交换Where(如果您想要多个交付交换,则交换Single)
这应该读得相当自然,但它是“在所有交付中,交付行项目的任何成员都有itemNumber为blah和orderLineNumber为blahblah的交付”,如果它有助于理解它单元测试通过!非常感谢。
int lineNumber = 10;
string itemNumber = "SYM-LS2208SR20007RUR";
var matchedDelivery = salesOrderDetail.Deliveries.Where(f => f.LineItems == f.LineItems.Where(l => (l.ItemNumber == itemNumber) && (l.OrderLineNumber == lineNumber))).First();
var matchedDeliveries = salesOrderDetail.Deliveries
.Where(d => d.LineItems.Any(li => li.ItemNumber == itemNumber && li.OrderLineNumber == lineNumber));