2012-03-28 38 views
1

如何将此TSQL查询转换为LINQ To SQL?如何在LINQ To SQL中使用.Count()?

Select p3.Alias, Count(p3.Alias) as [Count] from Persons p1 
INNER JOIN Addresses a ON p1.Id  = a.Person 
INNER JOIN Persons  p2 ON a.CityX  = p2.Id 
INNER JOIN ContrAgents ca ON p2.Id  = ca.Slave 
INNER JOIN Persons  p3 ON ca.Master = p3.Id 
where p1.Type >9 and p1.Type<16 
group by p3.Alias 

我想两两件事:data在p3.Alias和p.Count()data

List<cNumberOfObject> number = (from p1 in vt.Persons 
              join a in vt.Addresses on p1.Id  equals a.Person 
              join p2 in vt.Persons  on a.CityX equals p2.Id 
              join ca in vt.ContrAgents on p2.Id  equals ca.Slave 
              join p3 in vt.Persons  on ca.Master equals p3.Id 
              where p1.Type>9 && p1.Type<16 
              group p3 by p3.Alias into p 
              select new cNumberOfObject 
              { 
               // Subject = p3.Alias, 
               Number = p.Count() 

              }).ToList(); 

回答

0

一个group by的结果是一个IGrouping。您可以通过访问IGrouping上的Key属性来访问您分组对象的列的值:

var number = (from p1 in vt.Persons 
       join a in vt.Addresses on p1.Id  equals a.Person 
       join p2 in vt.Persons  on a.CityX equals p2.Id 
       join ca in vt.ContrAgents on p2.Id  equals ca.Slave 
       join p3 in vt.Persons  on ca.Master equals p3.Id 
       where (p1.Type > 9 && p1.Type < 16) 
       group p3 by p3.Alias into p 
       select new cNumberOfObject 
       { 
        Subject = p.Key, // The alias 
        Number = p.Count() 
       }).ToList()