C# Linq GroupBy

标签 c# linq

给定一个这样的字符串列表

“Val.1.ValueA”
"Val.1.ValueB"
"Val.1.ValueC"
"Val.2.ValueA"
"Val.2.ValueB"
"Val.2.ValueC"
"Val.3.ValueA"
"Val.3.ValueB"
“Val.3.ValueC”

如何编写 linq groupby 语句以按字符串的第一部分(包括数字)进行分组?换句话说,在上述情况下,我想要一个包含 3 个组 Val.1、Val.2、Val.3 的列表

最佳答案

使用 String.Split() 定义您的组键:

var groups = myList.GroupBy(x => { var parts = x.Split('.'); 
                                   return parts[0] + parts[1]; });

无论 key 的两个部分(点之前和之后)的长度如何,这都有效。

编辑以回应评论:

听起来你想按字符串中的数字进行分组,但你事先并不知道数字的组成部分。在这种情况下,这应该有效:

var groups = myList.GroupBy(x => 
    { 
        var parts = x.Split('.'));
        int num = 0;
        return parts[0] + parts.Where(p => p.All(char.IsDigit)
                               .First( p => int.TryParse(p, out num));
    }
);

关于C# Linq GroupBy,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5902093/

相关文章:

c# - 如何展平嵌套对象 (LINQ)

c# - 将平面列表转换为关系列表

c# - 创建 C# LINQ 可选连接扩展

C# 将 linq 列表 (int) 项更改为 (string)

c# - 在.Net MVC中进行无限循环

c# - 静态方法中的 Lock()

c# - 多线程 WPF Application : Dispatcher Invoke. 更高效的方法?

c# - 除非使用断点单步执行,否则代码行不起作用

c# - 从 3 个点检索正角或负角

c# - LINQ to XML - 如何从匿名对象获取字典?