【问题标题】:How to order group results in linq如何在 linq 中排序组结果
【发布时间】:2014-10-22 04:22:32
【问题描述】:

我有一个文件列表,比如 prg_3.txt 、 prg_2.txt 、 prg_1.txt 。

我需要遍历文件并按 1,2,3 的顺序合并文件。

我使用的查询如下:

var Groups = shortfilenames.GroupBy(s => s.Substring(0, s.IndexOf('_'))).ToList();

上面的查询将创建一个组名 prg,它将有 3 个文件。

现在,我需要按 1、2、3 的顺序对它们进行排序,即从它们的文件名开始。

在这里,我得到了分组结果,但我不确定如何对每个组中的元素进行排序

请帮忙..如有任何问题请告诉我..

已编辑:

够好吗?

  var userGroups = shortfilenames.GroupBy(s => s.Substring(0, s.IndexOf('_'))).Select(g=>g.OrderBy(x=>x.Substring(x.IndexOf('_',x.Length-x.IndexOf('_')))));

【问题讨论】:

  • 您的文件名是来自 SQL 还是 sql-order-by 标记是红鲱鱼?
  • No..its from C# application..它只是 linq order by。

标签: c# linq group-by sql-order-by


【解决方案1】:

这应该可行,但可能不会那么有效:

shortfilenames
    .GroupBy(s => s.Substring(0, s.IndexOf('_')))
    .Select(
        g => g.OrderBy(x => int.Parse(new String(x.Where(char.IsDigit).ToArray()))));

如果您的文件包含额外的数字,这将不起作用,这是解决此问题的另一种解决方案,根据您的评论,这应该适用于您指定的格式:

 shortfilenames
      .GroupBy(s => s.Substring(0, s.IndexOf('_')))
      .Select(g => g.OrderBy(
          x =>
             {
                 var index = x.IndexOf('_');
                 return int.Parse(x.Substring(index + 1, x.LastIndexOf('.') - index));
             }));

【讨论】:

  • 缺少几个) ;)
  • 你能解释一下这个查询吗?在这里,文件的格式将被固定,为 xxxxx_digits
  • 您能解释一下您的问题吗?
  • 获取查询中的数字会从数字中创建一个新字符串,然后将该字符串解析为整数并根据该值执行排序
【解决方案2】:

如果您想按文件名对内部分组进行排序,这应该可以解决问题:

shortfilenames.GroupBy(s => s.Substring(0, s.IndexOf('_'))).Select(g => g.OrderBy(e => e)).ToList();

【讨论】:

  • 正如 selman 评论的那样,将在 11 和 2 上失败。不知道为什么不赞成投票
【解决方案3】:

既然名称有点匹配,那么简单地使用OrderBy 并为其命名有什么问题?

var v = new string[] {"prg_3.txt","prg_2.txt", "prg_1.txt"};

var sorted = v.OrderBy(name => name); 

你得到:

prg_1.txt 
prg_2.txt 
prg_3.txt 

【讨论】:

  • 你的意思是 OrderBy 吗?
  • :) 。我做到了...我正在更改它并添加示例
  • 在这里,我进行分组是因为可以有多组文件,例如 pr1,pr2,pr3 是一组,prg1,prg2 和 prg3 可以是另一组。
  • 我需要上面提到的查询的扩展
  • prg1,prg2,prg3是一个用户的txt文件,pr1,pr2,pr3是另一个用户的txt文件。我需要每个用户的组文件并订购它们。分组后我无法订购
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-09-13
  • 1970-01-01
相关资源
最近更新 更多