我需要从嵌套对象中提取特定值,而不使用 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);
但是我的语法一定不正确,因为我无法获取我需要的值?
最佳答案
如果您需要访问(嵌套)集合的项目,SelectMany
是您的 friend :
var shipToAddress = Order.OrderItems
.SelectMany(oi => oi.OrderItemShipping.Select(ois => ois.ShipAddress.Address1)))
.FirstOrDefault();
您的语法错误,因为 FirstOrDefault
的重载需要谓词(因此返回 bool
的函数),但您传递的是:FirstOrDefault(x = > x.Address.Address1)
。
如果您需要以某种方式过滤它(“嵌套对象的特定值”),您需要更准确地解释您的要求。
关于c# - Linq 查询从嵌套对象获取值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40848646/