给出像这样的字符串列表
“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
的列表答案 0 :(得分:5)
使用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));
}
);
答案 1 :(得分:5)
如果没有关于格式的更多信息,最简单的是:
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]);
});