2010-10-05 2 views
0

Я пытаюсь преобразовать следующий SQL в LINQ. У меня был успех с 1 группой по переменной, но я не мог заставить это работать. Любая помощь будет оценена по достоинству.SQL to LINQ group

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

Результат выглядит примерно так:

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

Не могли бы вы дать некоторые образцы данных из ScanLogs and Exhibits? Легче проверять ситуацию. – Kyte

ответ

3

Я считаю, это будет сделать это:

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() }; 

Это не важно, что группируется (1 в данном случае), вы просто подсчитываете, сколько их есть.

Возможно, я бы воспользовался (а) связи. Это должно быть эквивалентно.

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

Другие варианы, использующие объединение и группировку.

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;