Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/291.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 在LINQ中获取组中的记录数_C#_Sql Server_Linq_C# 4.0_Linq To Entities - Fatal编程技术网

C# 在LINQ中获取组中的记录数

C# 在LINQ中获取组中的记录数,c#,sql-server,linq,c#-4.0,linq-to-entities,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

我写了一个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
来实现这一点,但有没有更好的方法来获得有记录的行(例如)结果中有一行?

这个怎么样:

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

您正在按StateCodeCityCode进行分组,因此每个组只有一个元素。您必须仅按StateCode分组,并再次按inlcude
其中grp.Count()==1
分组

每个组都包含StateCode作为其键和元素的枚举。由于您已经为仅包含单个元素的组进行了筛选,因此只需返回每个组的第一个元素:

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

抱歉,这是打字错误,这肯定有效,但你想选择什么?您可以执行
选择grp
,但不能执行
选择a
。如果您需要选择整行,您将需要一个更复杂的查询。我没有仔细阅读,这是对的。我已经更新了我的答案。你测试过了吗?它没有返回任何东西它在一张桌子上做的工作我认为与你的例子类似,但是在另一次阅读了你的问题和评论之后,我仍然不完全清楚你在问什么。如果我的最新更新不正确,我就不做了。你不是想要
02 001
,因为
02
StateCode
中只存在一次吗?如果是这样,您只需要按状态分组代码,并从1个元素的组中仅选择1,因为1个元素的组可能更多,在您的示例中,它只是
02
。是的,不止
02
。问题是我想为状态
02
获取
02
001
。通过分组,我可以得到其中一个,然后数一数另一个。