我正在寻找一个简单的LINQ查询,它可以获取集合集合中的项目.考虑以下模型......
class Customer
{
List<Order> Orders;
int ID;
}
class Order
{
int ID;
}
Run Code Online (Sandbox Code Playgroud)
可以说我有一个类型客户列表...
List<Customer> Customers;
Run Code Online (Sandbox Code Playgroud)
我想要的是基于订单 ID的单个订单(这是我已知的输入数据).我也可以假设订单对于客户来说是唯一的(因此只有一个订单具有我在所有客户中寻找的ID)
有没有一个很好的LINQ查询,我可以使用它来获取我正在寻找的订单?
我知道我可以轻松地在一个Orders列表中执行此操作,但这是我必须使用的设置.我不想查询更多数据,如果我已经有足够的内存来获得我需要的东西了.
我可以用半凌乱的for循环来做到这一点.也许我应该这样做?也许我试图过多地简化代码?
Jon*_*eet 14
哎呀,误读了这个问题:
var matchingOrders = from customer in customers
from order in customer.Orders
where order.ID == orderID
select order;
var order = matchingOrders.Single();
Run Code Online (Sandbox Code Playgroud)
与此答案的早期版本一样,请注意,如果没有此类匹配或多个匹配,则此操作将失败.你也可以看看SingleOrDefault,First和FirstOrDefault.
此代码也可以写成不使用查询表达式SelectMany:
var order = customers.SelectMany(customer => customer.Orders)
.Single(order => order.ID == orderID);
Run Code Online (Sandbox Code Playgroud)
请注意,您没有需要使用Where,然后Single-有一个Single过载采取谓词(且同样FirstOrDefault等等).您是否使用查询表达式由您决定 - 我通常使用查询表达式而不是SelectMany,但在这种情况下您不需要客户,因此您可以使用简单的重载SelectMany.