【问题标题】:Get number of records n a group in LINQ在LINQ中获取一组记录的数量
【发布时间】:2013-10-26 08:21:04
【问题描述】:

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

【问题讨论】:

  • 您不是想要02 001,因为02StateCode 中只出现一次吗?如果是这样,您只需要group by StateCode,并从 1 个元素的组中仅选择 1 个,因为可能有更多的 1 个元素组,在您的示例中,它只是 02
  • 是的,不止02。问题是我想获得02001 状态02。使用 group by 我可以得到其中一个并计算其他的。

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


【解决方案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();

【讨论】:

    【解决方案2】:

    这个怎么样:

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

    【讨论】:

    • 抱歉打错了
    • 这绝对有效,但您要选择什么?你可以做select grp,但不能做select a。如果需要选择整行,则需要更复杂的查询。
    • 适合我不仔细阅读。我已经更新了我的答案。
    • 你测试了吗?它不返回任何东西
    • 它确实在我认为与您的示例相似的桌子上工作,但是在再次阅读您的问题和 cmets 之后,我仍然不完全清楚您在问什么。如果我的最新更新不正确,我会留下它。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-08-03
    • 1970-01-01
    • 2020-01-17
    相关资源
    最近更新 更多