EF 4 CTP 5 Сложный запрос - PullRequest
       87

EF 4 CTP 5 Сложный запрос

2 голосов
/ 17 февраля 2011

У меня есть модель, подобная следующей:

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 ]

1 голос
/ 17 февраля 2011

я нашел 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

И нужно добавить все родительские-свойства объекта

0 голосов
/ 17 февраля 2011

Это может сработать или нет:

from customer in customers
where customer.Orders.Any(
      o => o.OrderLines.Any(l => l.Product.Category.Name == "Beverages")
select customer

(я полагаю, вы забыли связь между продуктом и категорией)

...