2009-10-13 12 views
4

Disons que nous avons un projet qui permet à l'utilisateur de télécharger des choses. Sur la page principale, je veux montrer les fichiers les plus téléchargés classés par le nombre de téléchargement! Tout cela en utilisant EF.Entity framework avec "Group By" et/ou "Order by"

Comment puis-je faire cela !! J'ai essayé beaucoup de choses avec Group By (c'est un cauchemar quand vous avez beaucoup d'informations dans un objet). Et je ne sais toujours pas comment le faire ...

var query = from details in m_context.TransactionDetails 
         where details.Chanson != null 
         group details by details.Items into AnItem 
         orderby AnItem.Count() 
         select new Item() { 
          IdItem = Chansons.Key.IdItem, 
          ItemState= Chansons.Key.ItemState, 
          [...This object got something like 20 including links to other objects ... ] 
         }; 

Quelqu'un a une idée?

Merci: o)

Oh et désolé pour mon anglais, je donne mon meilleur mais im du Québec (usualy parler français).

Répondre

2

Salut!

Je vais deviner votre modèle de données un peu, ici, mais je ne pense pas que vous devez groupe:

var query = from details in m_context.TransactionDetails 
      where details.Chanson != null 
      orderby details.Items.Count() descending 
      select new Item 
      { 
       IdItem = details.Chanson.IdItem, 
       ItemState= details.Chanson.ItemState, 
       // ... 
      }; 

Bonne chance!

Mise à jour: Pour les albums:

var query = from details in m_context.TransactionDetails 
      where details.DisqueCompact != null 
      orderby details.Items.Count() descending 
      select new Item 
      { 
       IdItem = details.DisqueCompact.IdItem, 
       ItemState= details.DisqueCompact.QuelqueChose... 
       // ... 
      }; 

Vous devez probablement deux requêtes données de votre modèle de données.

+0

Ahh sympa! Ensuite, je n'ai pas besoin de faire un "nouvel article()" !! Je n'ai qu'à retourner une liste des objets sélectionnés et ça! Haha, "Pourquoi faire facilement quand je peux le rendre difficile" ... Proverbe du Québec. –

+0

Eh bien, après avoir vérifié mon code, ça ne marche pas! Pardon! Dans ce cas, je veux obtenir une liste de "TransactionDetails" classés par nombre de fois qu'un "TransactionDetails.Chanson" où téléchargé ... Je pense que je dois faire un groupe par et obtenir un cout de cela. –

+1

Cela ne me semble pas (encore une fois, sans voir votre modèle) comme si vous aviez besoin d'un groupe. Vous dites "ça ne marche pas". Pouvez-vous expliquer précisément * ce qui ne fonctionne pas? –

1

Pour regroupement des données, vous pouvez lire this How-To de MSDN.

+0

Oui je l'ai lu ce fil et encore ne trouve pas un moyen de le faire fonctionner avec mon problème: o | –

-1

Voici un exemple de la façon dont vous devriez le faire:

//this is a entity framework objects 
CTSPEntities CEntity = new CTSPEntities(); 

//and this is your example query 
var query = (from details in CEntity.Purchase_Product_Details 
      group details by new { details.Product_Details.Product_Code, details.Product_Details.Product_Name} into Prod 
      select new 
      { 
       PID = Prod.Key.Product_Code, 
       PName = Prod.Key.Product_Name, 
       Amount = Prod.Sum(c => c.Lot_Amount), 
       count= Prod.Count() 
      }).OrderBy(x => x.Amount); 
foreach (var item in query) 
{ 
    Console.WriteLine("{0},{1},{2},{3}",item.PID,item.PName,item.Amount,item.count); 
} 
Console.ReadLine();