Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/linq/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# Linq:匹配子对象列表中子对象的属性,并从父对象列表返回父对象_C#_Linq - Fatal编程技术网

C# Linq:匹配子对象列表中子对象的属性,并从父对象列表返回父对象

C# Linq:匹配子对象列表中子对象的属性,并从父对象列表返回父对象,c#,linq,C#,Linq,我正试图编写一个Linq查询来返回一个通过匹配其子对象的属性来标识的父对象。我的类是一个销售订单,它有一个交货清单,而交货清单又有一个行项目清单。我希望在交货的LineItems中的Item Number和Line Number属性匹配时返回交货对象 课程: public class SalesOrderDetail { [JsonProperty("SalesOrderNumber")] public string SalesOrderNumber { g

我正试图编写一个Linq查询来返回一个通过匹配其子对象的属性来标识的父对象。我的类是一个销售订单,它有一个交货清单,而交货清单又有一个行项目清单。我希望在交货的LineItems中的Item Number和Line Number属性匹配时返回交货对象

课程:

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));