2010-10-05 9 views
0

Je suis en train de convertir le code SQL suivant en LINQ. J'ai eu du succès avec 1 groupe par variable mais je n'ai pas réussi à le faire fonctionner. Toute aide serait appréciée.Groupe SQL vers LINQ par

select ContactID, EventID, Count=count(*) 
    from ScanLogs s, Exhibits e 
    where s.ExhibitID = e.ExhibitID 
    group by s.ContactID, e.EventID 

Le résultat ressemble à ceci:

ContactID EventID Count 
300009 2000048 2 
300009 2000096 1 
300036 2000096 1 
+0

Rend plus facile de tester les choses. – Kyte

Répondre

3

Je crois que ce sera le faire:

var query = from s in ScanLogs 
      from e in Exhibits 
      where s.ExhibitID == e.ExhibitID 
      group 1 by new { s.ContactID, e.EventID } into g 
      select new { g.Key.ContactID, g.Key.EventID, Count = g.Count() }; 

Il importe peu ce qui est regroupé (1 dans ce cas), vous êtes en train de compter combien il y en a.

J'aurais probablement utilisé une jointure cependant. Cela devrait être équivalent.

var query = from s in ScanLogs 
      join e in Exhibits on s.ExhibitID equals e.ExhibitID 
      group 1 by new { s.ContactID, e.EventID } into g 
      select new { g.Key.ContactID, g.Key.EventID, Count = g.Count() }; 
0

Autre varian utilisant join et group by. Pourriez-vous nous donner quelques exemples de données provenant de ScanLogs et Exhibits?

var query = from c in ScanLogs 
      join d in Exhibits on c.ExhibitID equals d.ExhibitID 
      group new{ 
      g.Key.ContactID, 
      g.Key.EventID, 
      Count = g.Count() 
      } 
      by new { 
       c.ContacID, d.EventID 
      } into g 
      select g;