una operaciones lista into con como basicas agrupar c# linq

c# - operaciones - Usar Linq para agrupar una lista de objetos en una nueva lista agrupada de lista de objetos



linq select group by (3)

La declaración de su grupo se agrupará por ID de grupo. Por ejemplo, si luego escribe:

foreach (var group in groupedCustomerList) { Console.WriteLine("Group {0}", group.Key); foreach (var user in group) { Console.WriteLine(" {0}", user.UserName); } }

eso debería funcionar bien Cada grupo tiene una clave, pero también contiene un IGrouping<TKey, TElement> que es una colección que le permite iterar sobre los miembros del grupo. Como Lee menciona, puedes convertir cada grupo en una lista si realmente quieres, pero si solo vas a iterar sobre ellos según el código anterior, no hay un beneficio real al hacerlo.

No sé si esto es posible en Linq, pero aquí va ...

Tengo un objeto:

public class User { public int UserID { get; set; } public string UserName { get; set; } public int GroupID { get; set; } }

Devuelvo una lista que puede parecerse a la siguiente:

List<User> userList = new List<User>(); userList.Add( new User { UserID = 1, UserName = "UserOne", GroupID = 1 } ); userList.Add( new User { UserID = 2, UserName = "UserTwo", GroupID = 1 } ); userList.Add( new User { UserID = 3, UserName = "UserThree", GroupID = 2 } ); userList.Add( new User { UserID = 4, UserName = "UserFour", GroupID = 1 } ); userList.Add( new User { UserID = 5, UserName = "UserFive", GroupID = 3 } ); userList.Add( new User { UserID = 6, UserName = "UserSix", GroupID = 3 } );

Quiero poder ejecutar una consulta de Linq en la lista anterior que agrupa a todos los usuarios por GroupID. Entonces, el resultado será una lista de listas de usuarios que contiene usuarios (si tiene sentido). Algo como:

GroupedUserList UserList UserID = 1, UserName = "UserOne", GroupID = 1 UserID = 2, UserName = "UserTwo", GroupID = 1 UserID = 4, UserName = "UserFour", GroupID = 1 UserList UserID = 3, UserName = "UserThree", GroupID = 2 UserList UserID = 5, UserName = "UserFive", GroupID = 3 UserID = 6, UserName = "UserSix", GroupID = 3

Intenté utilizar la cláusula groupby linq pero parece que devuelve una lista de claves y no está agrupada correctamente:

var groupedCustomerList = userList.GroupBy( u => u.GroupID ).ToList();

Cualquier ayuda sería muy apreciada.

Gracias


Por tipo

public class KeyValue { public string KeyCol { get; set; } public string ValueCol { get; set; } }

colección

var wordList = new Model.DTO.KeyValue[] { new Model.DTO.KeyValue {KeyCol="key1", ValueCol="value1" }, new Model.DTO.KeyValue {KeyCol="key2", ValueCol="value1" }, new Model.DTO.KeyValue {KeyCol="key3", ValueCol="value2" }, new Model.DTO.KeyValue {KeyCol="key4", ValueCol="value2" }, new Model.DTO.KeyValue {KeyCol="key5", ValueCol="value3" }, new Model.DTO.KeyValue {KeyCol="key6", ValueCol="value4" } };

nuestra consulta linq se ve a continuación

var query =from m in wordList group m.KeyCol by m.ValueCol into g select new { Name = g.Key, KeyCols = g.ToList() };

o para array en lugar de list como a continuación

var query =from m in wordList group m.KeyCol by m.ValueCol into g select new { Name = g.Key, KeyCols = g.ToList().ToArray<string>() };


var groupedCustomerList = userList .GroupBy(u => u.GroupID) .Select(grp => grp.ToList()) .ToList();