在linq中使用外部方法

时间:2016-12-28 10:20:05

标签: c# linq

我有一个外部方法,如下面的签名

double mymethod(this IEnumerable<double> data)

我的数据集如下..

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

我希望按照ColA进行分组,然后对ColB的值运行该方法。

结果会是......

GrColA       ResultColB
1            5
2            9

真诚感谢所有帮助。

由于

3 个答案:

答案 0 :(得分:0)

您可以尝试这样的事情:

var result = data.GroupBy(x=>x.ColA)
                 .Select(gr=>new{
                     GrColA = gr.Key,
                     ResultColB = gr.Select(x=>Convert.ToDouble(x.ColB).mymethod()
                 });
  • 最初,我们按ColA
  • 的数据进行分组
  • 我们在每个组的结果集中应用mymethod

答案 1 :(得分:0)

尝试这样的事情

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();

        }
    }
}

答案 2 :(得分:0)

使用&#34; ColA&#34;,&#34; ColB&#34;创建一个类类型。属性如下:

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

然后初始化您的数据集对象

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

并在您的数据集上执行以下操作

dataSet.GroupBy(a => a.ColA).Select(gr => new { GrColA = gr.Key, ResultColB = mymethod(gr));