2013-01-09 2 views
4

Ceci est la requête que j'essaie de faire.C# EF Deep Lambda Distinct Count Requête

var commentActivity = project.ProjectDoc 
     .Select(c => c.Comment.Select(i => i.UserID)) 
     .Distinct() 
     .Count(); 

Ce que je veux, c'est le nombre de commentaires d'utilisateurs distincts sur un projet spécifique, mais quel que soit ProjectDoc. Cette requête "fonctionne" le résultat est juste faux. Le modèle est comme ça, esquissé génériquement.

Project 
     ProjectDoc 
      Comment 

Mise à jour: je devais aller un niveau plus profond, basé sur la réponse ci-dessous j'ai essayé quelques petites choses qui ne fonctionnait pas si je pensais que je posterais comme référence. Notez les deux méthodes SelectMany.

var replyActivity = project.ProjectDoc 
     .SelectMany(c => c.Comment.SelectMany(r => r.CommentReply.Select(u => u.UserID))) 
     .Distinct() 
     .Count(); 

Répondre

5

Utilisation SelectMany au lieu de Select

project.ProjectDoc 
     .SelectMany(c => c.Comment.Select(i => i.UserID)) 
     .Distinct() 
     .Count() 
+0

Après des heures de violon, je suis juste venu avec la même chose il y a 2 minutes ... pas que c'était intentionnellement, juste un accident heureux. Je vous remercie!!! –

0
var data = (from con in project.ProjectDoc 
       select new 
       { 
       CommentCount=project.Comment.Count(x=>x.UserID==con.UserID) 

       }).ToList(); 

Je pense que cela vous aidera.