C# 在linq中使用外部方法

C# 在linq中使用外部方法,c#,linq,C#,Linq,我有一个外部方法,如下面的签名 double mymethod(this IEnumerable<double> data) 我希望按ColA分组,然后对ColB的值运行该方法 所以结果是 GrColA ResultColB 1 5 2 9 衷心感谢您的帮助 谢谢您可以尝试以下方式: var result = data.GroupBy(x=>x.ColA) .Select(gr=>

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

double mymethod(this IEnumerable<double> data)
我希望按ColA分组,然后对ColB的值运行该方法

所以结果是

GrColA       ResultColB
1            5
2            9
衷心感谢您的帮助


谢谢

您可以尝试以下方式:

var result = data.GroupBy(x=>x.ColA)
                 .Select(gr=>new{
                     GrColA = gr.Key,
                     ResultColB = gr.Select(x=>Convert.ToDouble(x.ColB).mymethod()
                 });
  • 首先,我们根据
    ColA
  • 我们在每组的结果集中应用
    mymethod

    • 试试这样的方法

      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();
      
              }
          }
      }
      
      使用系统;
      使用System.Collections.Generic;
      使用System.Linq;
      使用系统文本;
      使用系统数据;
      命名空间控制台应用程序33
      {
      班级计划
      {
      静态void Main(字符串[]参数)
      {
      DataTable dt=新的DataTable();
      添加(“ColA”,typeof(int));
      添加(“ColB”,typeof(int));
      Add(新对象[]{1,1,});
      Add(新对象[]{1,2,});
      Add(新对象[]{2,1,});
      Add(新对象[]{2,3,});
      var groups=dt.AsEnumerable().GroupBy(x=>x.Field(“ColA”)).ToList();
      var results=groups.Select(x=>x.Select(y=>new{a=x.Key,b=y.Field(“ColB”)});
      }
      }
      }
      
      创建具有“ColA”、“ColB”属性的类类型,如下所示:

      public class Datum
      {
          public double ColA { get; set; }
          public double ColB { get; set; }
      }
      
      然后初始化数据集对象

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

      你看过LINQ?.GroupBy(x=>x.ColA)的方法了吗?Select(s=>new{GrColA=s.Key,resultclb=??}@haim770我没有在x之后得到值。我有我自己的外部方法,我希望用它来代替Sum..resultclb=mymethod(gr.Select(x=>Convert.ToDouble(x.ColB)).ToList()@Arnab请检查我的更新。这通常是可行的。我原以为
      ColB
      已经是一个数字了,不需要转换为double:(。无论如何,加上这个,现在应该可以了。
      IEnumerable<Datum> dataSet = GetData() //Some method to get data
      
      dataSet.GroupBy(a => a.ColA).Select(gr => new { GrColA = gr.Key, ResultColB = mymethod(gr));