Tengo un método externo como la siguiente firma

double mymethod(this IEnumerable<double> data)

Mi conjunto de datos es el siguiente ...

ColA  ColB
1     1
1     2
2     1
2     3
and so on..

Deseo agrupar por ColA y luego ejecutar el método en los valores de ColB.

Entonces el resultado sería ...

GrColA       ResultColB
1            5
2            9

Toda ayuda es sinceramente apreciada.

Gracias

2
Arnab 28 dic. 2016 a las 13:20

3 respuestas

La mejor respuesta

Podrías probar algo como esto:

var result = data.GroupBy(x=>x.ColA)
                 .Select(gr=>new{
                     GrColA = gr.Key,
                     ResultColB = gr.Select(x=>Convert.ToDouble(x.ColB).mymethod()
                 });
  • Inicialmente agrupamos por los datos por ColA
  • Aplicamos en el conjunto de resultados de cada grupo el mymethod.
0
Christos 28 dic. 2016 a las 10:36

Prueba algo como esto

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Data;


namespace ConsoleApplication33
{

    class Program
    {

        static void Main(string[] args)
        {
            DataTable dt = new DataTable();
            dt.Columns.Add("ColA", typeof(int));
            dt.Columns.Add("ColB", typeof(int));

            dt.Rows.Add(new object[] { 1,1,});
            dt.Rows.Add(new object[] { 1, 2, });
            dt.Rows.Add(new object[] { 2, 1, });
            dt.Rows.Add(new object[] { 2, 3, });

            var groups = dt.AsEnumerable().GroupBy(x => x.Field<int>("ColA")).ToList();

            var results = groups.Select(x => x.Select(y => new { a = x.Key, b = y.Field<int>("ColB") }).ToList()).ToList();

        }
    }
}
0
jdweng 28 dic. 2016 a las 10:28

Cree un tipo de clase con las propiedades "ColA", "ColB" de la siguiente manera:

public class Datum
{
    public double ColA { get; set; }
    public double ColB { get; set; }
}

Luego inicialice su objeto de conjunto de datos

IEnumerable<Datum> dataSet = GetData() //Some method to get data

Y realice lo siguiente en su conjunto de datos

dataSet.GroupBy(a => a.ColA).Select(gr => new { GrColA = gr.Key, ResultColB = mymethod(gr));
0
Sivaram K 28 dic. 2016 a las 10:55