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