leer ejemplos crear c# linq datatable linq-group

c# - ejemplos - Grupo de DataTable el resultado



leer datatable c# (2)

Quiero agrupar en Datatable por nombre, apellido y el resto debería estar en la misma fila. ¿Alguien puede ayudarme con eso?

Mi DataTable:

Name LastName 1 3 2 kiki ha FF lola mi AA ka xe UU kiki ha SS

Quiero tener el grupo DataTable por nombre:

Name LastName 1 3 2 kiki ha FF SS lola mi AA ka xe UU

Mi nuevo código:

var result11 = from t1 in newtable.AsEnumerable() group t1 by new { Name = t1.Field<String>("Name"), LastName = t1.Field<String>("LastName") } into grp select new { Name = grp.Key.Name, LastName = grp.Key.LastName, //Something must be there };


Agregue estas líneas en lugar del comentario ( //something must be there ):

C1 = String.Join(",", grp.Select(r=>r.Field<String>("1"))), C2 = String.Join(",", grp.Select(r=>r.Field<String>("2"))), C3 = String.Join(",", grp.Select(r=>r.Field<String>("3")))

para obtener tres nuevas columnas en la salida que agregan valores de las columnas 1 , 3 y 2 .

Si tiene varios valores en una de las columnas de un grupo, todos los valores se mostrarán y separarán por comas ( , ).

Si está seguro de que hay como máximo un valor por columna por grupo, puede hacer lo siguiente:

C1 = grp.Max(r => r.Field<String>("1")), C3 = grp.Max(r => r.Field<String>("3")), C2 = grp.Max(r => r.Field<String>("2"))


Si desea una DataTable como resultado, esto le dará el resultado deseado:

var lastNameGroups = from row in table1.AsEnumerable() group row by new { Name= row.Field<String>("Name"), LastName = row.Field<String>("LastName") } into LastNameGroups select LastNameGroups; var table2 = table1.Clone(); foreach (var lng in lastNameGroups) { var row = table2.Rows.Add(); row.SetField("Name", lng.Key.Name); row.SetField("LastName", lng.Key.LastName); var ones = lng.Where(r => !string.IsNullOrEmpty(r.Field<String>("1"))); if(ones.Any()) row.SetField("1", ones.First().Field<String>("1")); var twos = lng.Where(r => !string.IsNullOrEmpty(r.Field<String>("2"))); if (twos.Any()) row.SetField("2", twos.First().Field<String>("2")); var threes = lng.Where(r => !string.IsNullOrEmpty(r.Field<String>("3"))); if (threes.Any()) row.SetField("3", threes.First().Field<String>("3")); }