在 LINQ 中获取组中的记录数

本文关键字:记录 获取 LINQ | 更新日期: 2023-09-27 18:36:53

我写了一个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做到这一点,但是有没有更好的方法来获取结果中包含(例如)一行的行?

在 LINQ 中获取组中的记录数

您按州代码城市代码分组,因此每个组只有一个元素。您必须仅按州代码分组,并再次包含where grp.Count() == 1

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

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

这个怎么样:

(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')