Я бы хотел, чтобы GroupBy собирал по определенным столбцам, но они могут различаться, и я не хотел бы жестко задавать поля, для которых будет иметь место группировка.
Я пытался:
users.GroupBy(groupingColumnIndexes.Select(a => x.ColumnValues[a]))
...
List<Row> users = new List<Row>()
{
new Row("John", "Doe", "10"),
new Row("John", "Doe", "45"),
new Row("Will","Smith", "26"),
new Row("Will", "Smith", "52"),
new Row("Julius", "Cesar", "23")
};
List<int> groupingColumnIndexes = new List<int>() { 0, 1 };
List<User> output = users
.GroupBy(x => {
// INFO: if I'd return groupingColumns code would not group users correctly.
var groupingColumns = groupingColumnIndexes.Select(a => x.ColumnValues[a]);
string col1Value = x.ColumnValues[0];
string col2Value = x.ColumnValues[1];
// Result below is working, but I would rather build more dynamic version.
var result = new { col1Value, col2Value };
return result;
})
.Select(x => new User
{
Name = string.Join(",", x.Key),
Age = (int)x.Sum(a => int.Parse(a.ColumnValues[2])),
LastName = string.Empty
}).ToList();
.NET Fiddle: https://dotnetfiddle.net/cPuafD
Ожидается: Джон Доу 55 Уилл Смит 78 Джулиус Сезар 23
Актуально при использовании GroupBy (список): Джон, Доу 10 Джон, Доу 45 Уилл, Смит 26 Уилл, Смит 52 Юлий, Сезар 23