我需要从嵌套对象中提取特定值而不使用foreach
循环。我认为这里的正确方法是一个linq查询,但我无法获取我需要的值。考虑到班级结构:
public class Order
{
public int OrderID { get; set; }
public List<OrderItems> { get; set; }
}
public class OrderItems
{
public int OrderItemID { get; set; }
public string ItemName { get; set; }
public int Quantity { get; set; }
public List<OrderItemShipping> OrderItemShippings { get; set; }
}
public class OrderItemShipping
{
public int OrderItemShippingID { get; set; }
public Address ShipAddress { get; set; }
public class Address
{
public int AddressID { get; set; }
public string FirstName { get; set; }
public string LastName { get; set; }
public string Address1 { get; set; }
public string City { get; set; }
public string State { get; set; }
public string PostalCode { get; set; }
}
我希望能够做到这样的事情:
var shipToAddress = Order.OrderItems.OrderItemShipping.FirstOrDefault(x => x.Address.Address1);
但我的语法一定不正确,因为我无法抓住我需要的值?
答案 0 :(得分:2)
如果您需要访问(嵌套)集合的项目SelectMany
,那么您的朋友是:
var shipToAddress = Order.OrderItems
.SelectMany(oi => oi.OrderItemShipping.Select(ois => ois.ShipAddress.Address1)))
.FirstOrDefault();
您的语法错误,因为FirstOrDefault
的重载需要一个谓词(所以函数返回bool
),但您传递的是FirstOrDefault(x => x.Address.Address1)
。
如果您需要以某种方式过滤它(&#34;来自嵌套对象的特定值&#34;),您需要更准确地解释您的需求。