2016-12-28 5 views
2

Ich habe eine externe Methode, wie die folgenden SignaturVerwendung externe Methode in Linq

double mymethod(this IEnumerable<double> data) 

Mein Datensatz wird wie folgt ..

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

ich zu einer Gruppe von ColA will und dann die Methode laufen auf die Werte von ColB.

So Ergebnis wäre ..

GrColA  ResultColB 
1   5 
2   9 

Alle Hilfe herzlich willkommen ist ..

Dank

+0

Haben Sie sich die [.GroupBy()] (https://msdn.microsoft.com/en-us/library/bb534304 (v = vs.110) .aspx) -Methode von LINQ angesehen? – RandomStranger

+0

.GroupBy (x => x.ColA) .Select (s => new {GrColA = s.Key, ResultColB = ????}) – Arnab

+0

@ haim770 Ich bin nicht Werte nach x zu bekommen. – Arnab

Antwort

0

Sie so etwas wie dies versuchen könnte:

var result = data.GroupBy(x=>x.ColA) 
       .Select(gr=>new{ 
        GrColA = gr.Key, 
        ResultColB = gr.Select(x=>Convert.ToDouble(x.ColB).mymethod() 
       }); 
  • initialy Wir gruppieren uns nach den Daten der ColA
  • Wir wenden im Ergebnis jeder Gruppe gesetzt die mymethod.
+0

ResultColB = mymethod laufen (gr.Select (x => Convert.ToDouble (x.ColB)). ToList()) – Arnab

+0

@Arnab überprüfen Sie bitte meine aktualisieren. Dies würde normalerweise funktionieren. Ich hatte angenommen, dass 'ColB' bereits eine Nummer ist und es keine Notwendigkeit gibt, die Konvertierung zu verdoppeln :(. Jedenfalls sollte es jetzt in Ordnung sein. – Christos

0

Probieren Sie etwas wie dieses

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

Erstellen Sie eine Klasse-Typ mit "Cola", "ColB" Eigenschaften, wie folgend:

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

dann Datensatz Objekt initialisieren

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

und führen Sie die folgenden auf Ihrem dataSet