繁体   English   中英

C#Linq GroupBy

[英]C# Linq GroupBy

给出这样的字符串列表

“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]; });

无论键的两个部分的长度如何(在点之前和之后),这都将起作用。

编辑以回应评论:

听起来您想要按字符串中的数字分组,但您事先并不知道哪个部分构成了数字。 在这种情况下,这应该工作:

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));
    }
);

没有关于格式的更多信息,最简单的是:

var groups = list.GroupBy(s => s.Substring(0, 5));

如果这些实际上不是固定的长度:

var groups = list.GroupBy(s => {
     var fields = s.Split('.');
     return String.Format("{0}.{1}", fields[0], fields[1]); 
});

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM