2009-08-21 6 views
0

Comment puis-je créer une requête qui retournera une seule entité avec une collection et triera la collection? Je ne me soucie pas si c'est deux appels à la DB .. i besoin que le résultat final soit un type d'entité et non un type anonyme:Requête retournant l'entité et la collection enfant .. la collection enfant triée?

var

category = context.Categories.Where (c = > c.categoryID == categoryID) .Sélectionnez (c => new {c, products = c.Produits.OrderByDescending (p => p.priceDate)}). First();

Mais je voudrais avoir ce qui précède soit renvoyer ou transtyper dans une catégorie avec les collections de produits .. comme apposé au type anonyme. Merci!

Répondre

0

Si vous avez des relations clés étrangères correctes dans votre base de données puis en faisant une sélection simple pour votre catégorie devrait suffire et vous pouvez commander les produits ainsi

Category category = context.Categories.Where(c => c.categoryID == categoryID).First(); 

List<Product> sortedProducts= context.Categories.products.OrderBy(...).ToList() 

Lorsque vos relations FK sont mis en place lorsque vous obtenez l'objet de niveau supérieur il devrait récupérer aussi ses enfants (je n'ai pas travaillé avec linq-to-entities mais avec linq-to-sql je ne peux pas imaginer qu'il soit différent dans cet aspect tho) Je pense que ceci devrait fonctionner ...

+0

Salut merci pour la réponse. Cela semble définitivement comme ça devrait fonctionner .. et semble tellement évident maintenant! Mais je reçois: "Ne peut pas implicitement convertir le type" System.Collections.GenericList à System.Data.Objects.DataClasses.EntityCollection " –

+0

Oui, c'est parce que vous ne pouvez pas .ToList () je ne pense pas, essayez de ne pas mettre .ToList() là, ou essayez d'utiliser sort() afin que vous n'ayez pas à l'assigner – Daniel

+0

Sans toList() il n'y aurait pas de résultat .. il n'y a pas de tri .. Jusqu'à la 2ème déclaration les produits ne sont pas chargés ... –

0

Pourriez-vous juste mettre cela dans la classe de catégorie? Quelque chose comme ceci:

public parital class Category 
{ 
     public Ilist<Product> ProductsByPriceDate 
     { 
      get 
      { 
       return this.Products.OrderbyDescending(p= > p.priceDate).ToList(); 
      } 
     } 
    } 
Questions connexes