【问题标题】:How to use groupby in linq sql如何在 linq sql 中使用 groupby
【发布时间】:2014-02-07 15:33:56
【问题描述】:

我正在尝试对列表进行分组并使用 ToDictionary 来实现这一点:

var levels = ids.GroupBy(f => f.Id).
    ToDictionary(g => g.Key, g => g.First().Name);

问题是:在字符串“Name”中,最后一个字符是一个数字,即 2 或 5 或 7 等。

我不想选择第一个,但我想选择带有 MAX 号的“名称”。我怎样才能做到这一点。名称的示例可以是:“abd-hbb-les3”、“abd-hbb-les1”、“abd-hbb-les6”

【问题讨论】:

  • 您可以按名称订购 desc 并获取第一个元素,不是吗?
  • 当您说要“选择”具有最大数量的“名称”时,您的意思是在 ToDictionary 内部?还是只有一个具有最大值的?

标签: c# .net linq linq-to-sql group-by


【解决方案1】:

您可以通过以下方式执行此操作:

var levels = ids.GroupBy(f => f.Id).ToDictionary(g => g.Key, 
    g => g.First( x=> x.Name.Last() == g.Max( y=> y.Name.Last())).Name);

假设它真的是关于最后一个字母,所以结尾不可能有两个(或更多)数字,例如:

abd-hbb-les16 //will not work with the above code

【讨论】:

    【解决方案2】:

    对于每个组,只需选择字符串最后一个字符最多的名称。像这样:

    var levels = ids.
        GroupBy(f => f.Id).
        ToDictionary(
            g => g.Key,
            g => g.First(i => i.Name.Last() == g.Max(j => j.Name.Last())).Name);
    

    【讨论】:

      猜你喜欢
      • 2011-07-23
      • 1970-01-01
      • 2016-12-11
      • 1970-01-01
      • 1970-01-01
      • 2013-12-18
      • 1970-01-01
      • 2017-07-05
      • 1970-01-01
      相关资源
      最近更新 更多