获取LINQ中组的记录数

时间:2013-10-26 08:21:05

标签: c# sql-server linq c#-4.0 linq-to-entities

我写了一个LINQ查询,结果与此类似:

var res = from a  in tbl
          group a by {a.StateCode,a.CityCode} into grp
          //where grp.Count() == 1
          select ...

StateCode       CityCode           ......
------------------------------------------
01               001               ......
01               002               ......
02               001               ......
03               001               ......
03               002               ......
03               003               ......

确实我想得到02 001记录,因为它在最终结果中有一个结果行。如果我添加注释代码它返回对应于每个组的记录计数,而不是自己组的计数。我知道我可以用两个group by执行此操作,但是有更好的方法来获取结果中有一行(例如)的行吗?

2 个答案:

答案 0 :(得分:1)

您按StateCode CityCode进行分组,因此每个组只有一个元素。您必须仅按StateCode进行分组,并再次包含where grp.Count() == 1

每个组都包含StateCode作为其键和元素的枚举。由于您已经过滤了只有一个元素的组,因此您只需返回每个组中的第一个:

var res = from a in tbl
          group a by a.StateCode into grp
          where grp.Count() == 1
          select grp.FirstOrDefault();

答案 1 :(得分:0)

这个怎么样:

(from b in Tbls
where (from a in Tbls
       where a.StateCode == b.StateCode
       group a by a.StateCode into grp
       where grp.Count () == 1
       select grp).Count() > 0
select b).Dump();

这是我用来测试它的SQL:

create table tbl (StateCode varchar(5), CityCode varchar(5))

insert tbl values ('01', '001')
insert tbl values ('01', '002')
insert tbl values ('02', '001')
insert tbl values ('03', '001')
insert tbl values ('03', '002')
insert tbl values ('03', '003')