2

J'ai un modèle comme ce qui suit:EF 4 CTP 5 requête complexe

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; } 
} 

J'utilise this infrastructure.

Mes racines agrégées sont Client, Commande, Produit. Je n'ai pas inclus les cartographies ici car ils sont simples. En utilisant LINQ, comment sélectionneriez-vous tous les clients ayant des commandes de produits dans la catégorie «Boissons»?

Tous les exemples que j'ai vu sur le web sont des requêtes très basiques rien avancé.

+0

Votre produit n'a pas d'informations sur la catégorie. –

+0

Où est la référence de Produit à Catégorie? – Nagg

Répondre

1

i trouvé http://msdn.microsoft.com/en-us/vbasic/bb737909

Peut-être votre requête devrait ressembler à:

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 

Et il est nécessaire d'ajouter toutes les propriétés-objet-parents

+0

cela ne générera-t-il pas de jointures croisées? Encore essayer. . – Sumanta

+0

La ligne de commande ne doit pas avoir la propriété Order donc cette "joint ol dans unitOfWork.OrderLines sur ol.Order = o" ne fonctionnera pas – Sumanta

+0

son besoin d'ajouter toutes les propriétés d'objet parent –

0

Cela pourrait fonctionner ou non:

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

(Je suppose que vous avez oublié la relation entre le produit un sd Category)

Questions connexes