2010-10-05 53 views
0

我试图将以下SQL转换为LINQ。我已经通过变量获得了1组的成功,但无法让这个工作。任何帮助,将不胜感激。SQL到LINQ组通过

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和Exhibits提供一些示例数据吗?使测试更容易。 – Kyte 2010-10-05 04:20:21

回答

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

另一个varian使用连接和group by。

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;