EF 4 CTP 5 Сложный запрос
У меня есть модель, подобная следующей:
public class Customer
{
public int Id { get; set; }
public string Name { get; set; }
public ICollection<Order> Orders { get; set; }
}
public class Order
{
public int Id { get; set; }
public DateTime DateTime { get; set; }
public Customer Customer { get; set; }
public ICollection<OrderLine> OrderLines { get; set; }
}
public class OrderLine
{
public int Id { get; set; }
public Product Product { get; set; }
public int Price { get; set; }
public int Quantity { get; set; }
}
public class Product
{
public int Id { get; set; }
public string Name { get; set; }
public Category Category { get; set; }
}
public class Category
{
public int Id { get; set; }
public string Name { get; set; }
}
Я использую эту инфраструктуру.
Мои общие корни - Клиент, Заказ, Продукт. Я не включил отображения здесь, поскольку они прямо вперед.
var customers = unitOfWork.Customers.FindAll();
var orders = unitOfWork.Orders.FindAll();
var products = unitOfWork.Products.FindAll();
var query = ......
Используя LINQ, как бы вы выбрали всех клиентов, у которых есть заказы на продукты в категории "Напитки"?
Все примеры, которые я видел в Интернете, являются очень простыми запросами, ничего сложного.
2 ответа
Я нашел http://msdn.microsoft.com/en-us/vbasic/bb737909
Может быть ваш запрос должен выглядеть так:
from c in unitOfWork.Customers
join o in unitOfWork.Orders on o.Customer = c
join ol in unitOfWork.OrderLines on ol.Order = o
where ol.Product.Category.Name == "Beverages"
select c
И нужно добавить все parent-object-properties
Это может сработать или нет:
from customer in customers
where customer.Orders.Any(
o => o.OrderLines.Any(l => l.Product.Category.Name == "Beverages")
select customer
(Я предполагаю, что вы забыли отношения между продуктом и категорией)