LINQ: запрос коллекции в коллекции - PullRequest
5 голосов
/ 14 июля 2011

У меня следующая структура:

public class Customer
{
  public int ID { get; set; }
  public List<Order> Orders { get; set; }
}

public class Order
{
  public int ID { get; set; }
  public int ProductID { get set; }
}

Мне нужно получить коллекцию клиентов, которые заказали ProductID = 6. Как будет выглядеть беглый стиль LINQ?

Я попробовал ниже без удачи:

var customers = allCustomers.SelectMany(c => c.Orders.Select(o => o.ProductID.Equals(6))).ToArray();

Ответы [ 5 ]

9 голосов
/ 14 июля 2011

var customers = allCustomers.Where(c => c.Orders.Any(o => o.ProductID == 6));

3 голосов
/ 14 июля 2011
allCustomers.Where(c => c.Orders.Any(o => o.ProductID == 6))
2 голосов
/ 14 июля 2011

Похоже, что вы хотите:

var query = allCustomers.Where(c => c.Orders.Any(o => o.ProductID == 6));
2 голосов
/ 14 июля 2011
var customers = allCustomers.Where(c => c.Orders.Any(o => o.ProductID == 6));
0 голосов
/ 14 июля 2011

Хорошим способом было бы попробовать с другой стороны, как это

var customers from p in Order where p.ProductId == 6 select p.Customer

И, конечно, вам нужно добавить свойство Customer в классе Order, как это

public class Order
{
  public int ID { get; set; }
  public int ProductID { get set; }
  public Customer Customer { get; set; }
}
...