日期:2014-05-20  浏览次数:20836 次

请教一个LINQ语句的实现
我有一张表,里面存放某地区所有的就诊记录

任何一个人,去任何一家医院就诊一次,形成一条记录

我想统计一段时间以内,同一人 在 同一医院 就诊多次 的情况下,该医院多次就诊的总人次数

以前在SSMS下,是分两步来查,语句是

select 医院号,人员编号,count(人员编号)as'次数' into 临时表 from 表
group by 医院号,人员编号
having count(人员编号)>1 
--先把同一人在一家医院就诊1次以上的查出来,放到临时表里面

select 医院号,sum(次数)as '人次数' from 临时表
group by 医院号

查询结果应该是:
医院名    多次诊疗总人次
人民医院      100
中医院        50
……


现在想做一个LINQ的查询工具,对如何用group by进行多个属性分组,并统计各组次数不太了解,请高手指点一下



------最佳解决方案--------------------
看看这个:

var n =  from u in 表
         group u by new { Name = u.医院号, UName = u.人员编号 } into g
         where g.Count() > 1  // 按医院号+人员编号分组计数,剔除总次数为1的
         from u2 in g
         group u2 by u2.Name;  // 按医院号统计

// 输出统计结果
foreach (var item in n)
{
   Trace.WriteLine(string.Format("{0}\t{1}", item.Key, item.Count()));
}

------其他解决方案--------------------
var query = 表.GroupBy(x => new { x.医院号, x.人员编号 }).Select(x => new { x.Key.医院号, x.Key.人员编号, Count = x.Count() }); //按照医院-人的统计次数
var query = 表.GroupBy(x => x.医院号).Select(x => new { 医院号 = x.Key, Count = x.Count() }); //按照医院的统计次数
var query = 表.Select(x => new { x.医院号, x.人员编号 }).Distinct().GroupBy(x => x.医院号).Select(x => new { 医院号 = x.Key, Count = x.Count() });  //按照医院的统计次数,每个人多次算1次。

------其他解决方案--------------------
引用:
看看这个:
C# code

var n =  from u in 表
         group u by new { Name = u.医院号, UName = u.人员编号 } into g
         where g.Count() > 1  // 按医院号+人员编号分组计数,剔除总次数为1的
         from u2 in g
         group u2 b……

可用,学习了,非常感谢