Entity framework EF 4 CTP 5复杂查询

Entity framework EF 4 CTP 5复杂查询,entity-framework,entity-framework-4,code-first,ef-code-first,entity-framework-ctp5,Entity Framework,Entity Framework 4,Code First,Ef Code First,Entity Framework Ctp5,我有一个如下的模型: 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 {

我有一个如下的模型:

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; }
}
使用LINQ,您将如何选择拥有“饮料”类别产品订单的所有客户

我在网上看到的所有示例都是非常基本的查询,没有什么高级的。

我发现

可能您的查询应该如下所示:

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

并且有必要添加所有父对象属性

,这可能有效,也可能无效:

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

(我假设您忘记了产品和类别之间的关系)

您的产品没有类别信息。从产品到类别的引用在哪里?这不会生成交叉联接吗?但我还没试过。Orderline没有Order属性,因此此“在unitOfWork中联接ol.OrderLines on ol.Order=o”将无法运行添加所有父对象属性所需的操作。如果没有父属性,有何方法可以执行此操作?如果没有父属性,则无法使用联接。在这种情况下,必须创建单独的查询。它的代码太多,令人不舒服
from customer in customers
where customer.Orders.Any(
      o => o.OrderLines.Any(l => l.Product.Category.Name == "Beverages")
select customer