2009-05-16 5 views
2

J'utilise Entity Framework. J'ai une relation de beaucoup à beaucoup Articles < -> Catégories. Chaque article peut appartenir à plusieurs catégories et chaque catégorie peut appartenir à plusieurs articles. Je peux obtenir le nombre d'articles dans chaque catégorie:Entity Framework: plusieurs à plusieurs nombre et somme

public IEnumerable<MenuCategory> GetMenuCategories() 
{ 
    return (from c in db.CategorySet.Include("Articles") 
    orderby c.CategoryName 
    select new MenuCategory 
    { 
     CategoryID = c.CategoryID, 
     CategoryName = c.CategoryName, 
     CountOfCategory = c.Articles.Count() 
     }); 

} 

Mais je dois aussi obtenir le nombre total d'articles pour que je puisse calculer le pourcentage d'articles est dans chaque catégorie. Quelqu'un peut-il me dire comment faire cela en étendant le code ci-dessus et sans faire un appel distinct à la base de données?

Merci

Répondre

0

Le code a besoin de connaître le nombre total d'articles afin de le faire.

Si vous voulez éviter un deuxième appel de base de données, vous pouvez faire le calc dans la base de données et le renvoyer comme une colonne supplémentaire dans le jeu de résultats. Il existe différentes façons d'y parvenir, mais l'un serait d'utiliser une vue et d'avoir une fonction SQL TotalArticles, alors votre calcul est juste articleCount/TotalArticles. Je ne connais pas grand chose au cadre de l'entité, donc je ne suis pas sûr que ce soit réalisable.

Si vous ne pouvez pas faire le calc dans la base de données alors j'imagine que le deuxième appel de base de données est inévitable bien qu'il ne s'agisse que d'un nombre d'articles, ce qui ajoute peu de frais généraux. Vous pouvez effectuer cet appel avant l'appel principal et ensuite ajouter la valeur à vos résultats de la même manière que ci-dessus, par exemple PercentageOfArticles = c.Articles.Count()/articleCount

+0

J'ai ajouté une méthode pour obtenir le compte de la base de données puis appliqué le résultat à une propriété supplémentaire de mon objet MenuCategory. Les deux valeurs sont disponibles dans ma vue ASP.NET MVC, ce qui me permet de créer un nuage de mots-clés. Il en résulte 2 appels db, mais je veux vraiment éviter de mettre des calculs dans la base de données. –

+0

ok, donc c'est essentiellement la dernière des 2 options que je propose –

Questions connexes