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