2012-02-13 4 views
0

J'ai un problème pour traduire cette requête en format LINQ:Distinct dans LINQ

select Version, count(distinct(idUser)) from HistoUsers 
group by Version 

Ce que j'ai à ce jour est le suivant:

public static List<VersionsUsed> GetNumberOfCompaniesUsingEachVersions2() 
{ 
    var foundUsers = (from hu in sdt.DataContext.HistoUsers 

         group hu by new { hu.Version, hu.IdUser } into g 
         select new VersionsUsed { nameVersion = g.Key.Version, NumberOfCompaniesUsingThisVersion = g.Count((g.Key.IdUser).distinct()) }); 

    return foundUsers.ToList(); 
} 

Semble j'ai un problème de syntaxe sur distincte() Quelqu'un peut-il m'aider à ce sujet? merci à l'avance

+0

Cocher cette http://blogs.msdn.com/b/charlie/archive/2006/11/19/linq-farm-group-and-distinct.aspx – AnarchistGeek

+0

et ce qui est similaire question http://stackoverflow.com/questions/2786750/how-to-get-particular-column-distinct-in-linq-to-sql – AnarchistGeek

+0

Si vous parlez de la version SQL, cela fonctionne parfaitement avec le serveur SQL, aucun problème sur celui-ci pour moi – Slrg

Répondre

1
from hu in sdt.DataContext.HistoUsers 
group hu by new { hu.Version, hu.IdUser } into g 
select new VersionsUsed 
{ 
    nameVersion = g.Key.Version, 
    NumberOfCompaniesUsingThisVersion = g.Select(c=>c.IdUser).Distinct().Count() 
} 
+0

Merci beaucoup pour votre aide. Cela semble correct mais j'ai beaucoup trop de résultats. comme si le distinct() n'était pas utilisé ... je ne comprends pas pourquoi ... – Slrg

1

Vous pouvez utiliser LINQER pour cela: il génère des déclarations équivalentes LINQ à partir des instructions SQL. Vous pouvez télécharger une version d'évaluation de 10 jours à partir du http://www.sqltolinq.com/downloads.

1

Peut-être quelque chose comme ceci:

select new VersionsUsed 
     { 
      nameVersion = g.Key.Version, 
      NumberOfCompaniesUsingThisVersion = g.Select(a=>a.IdUser).Distinct().Count()) 
     }; 
+0

Merci beaucoup pour votre aide. Cela semble correct mais j'ai beaucoup trop de résultats. comme si le distinct() n'était pas utilisé ... je ne comprends pas pourquoi ... – Slrg

1

Votre déclaration distincte doivent ressembler à ceci: Distinct(...)

1ère lettre supérieure

0

Au lieu de distinct utiliser le mot-clé first. Il fonctionnera:

var foundUsers = (from hu in sdt.DataContext.HistoUsers 
    group hu by new { hu.Version, hu.IdUser } into g 
    select new VersionsUsed { nameVersion = g.Key.Version, NumberOfCompaniesUsingThisVersion = g.Count((g.Key.IdUser).First()) }); 
return foundUsers.ToList();