为了账号安全,请及时绑定邮箱和手机立即绑定

在 LINQ 选择中使用公式

在 LINQ 选择中使用公式

C#
GCT1015 2022-01-09 10:32:30
我有一个如下所示的数据表:Row Side    Value1   A       34.81   B       33.91   C       33.12   A       32.62   B       32.02   C       35.73   A       34.63   B       34.03   C       33.5我需要做的一件事是计算我喜欢的每一行的平均值:var avg = (from row in dt.AsEnumerable()          group row by new { RowMeas = row.Field<string>("Row") } into grp          select new          {             RowMeas = grp.Key.RowMeas,             AVG = grp.Average(r => r.Field<double>("Value"))         }).ToList();现在我需要做一些类似的事情,但不是只取平均值,我想为每一行使用一个公式,比如 4*A + 3*B + 2*C我可以像上面那样使用 LINQ 来做到这一点,而不是 AVG 以某种方式使用这个公式吗?在其他软件中,我们通过转置数据表手动执行此计算,以便有 A、B、C 列,然后可以在新列的公式中使用这些列。由于在 C# 中转置不是一种简单的方法,我希望我可以使用 LINQ 来做到这一点。
查看完整描述

1 回答

?
慕侠2389804

TA贡献1719条经验 获得超6个赞

var dt = new DataTable();

dt.Columns.Add("Row", typeof(string));

dt.Columns.Add("Side", typeof(string));

dt.Columns.Add("Value", typeof(double));


dt.Rows.Add(1, "A", 34.8);

dt.Rows.Add(1, "B", 33.9);

dt.Rows.Add(1, "C", 33.1);

dt.Rows.Add(2, "A", 32.6);

dt.Rows.Add(2, "B", 32.0);

dt.Rows.Add(2, "C", 35.7);

dt.Rows.Add(3, "A", 34.6);

dt.Rows.Add(3, "B", 34.0);

dt.Rows.Add(3, "C", 33.5);


var query = dt

    .AsEnumerable()

    .GroupBy(x => x.Field<string>("Row"))

    .Select(x => new

    {

        Row = x.Key,

        A = x.Where(y => y.Field<string>("Side") == "A").Select(z => z.Field<double>("Value")).FirstOrDefault(),

        B = x.Where(y => y.Field<string>("Side") == "B").Select(z => z.Field<double>("Value")).FirstOrDefault(),

        C = x.Where(y => y.Field<string>("Side") == "C").Select(z => z.Field<double>("Value")).FirstOrDefault()

    })

    .Select(x => new

    {

        Row = x.Row,

        Result = 4 * x.A + 3 * x.B + 2 * x.C

    })

    ;


foreach (var q in query)

    Console.WriteLine("Row = {0}, Result = {1}", q.Row, q.Result);

结果在 LinqPad 中。

//img1.sycdn.imooc.com//61da495f0001e40a13600769.jpg

查看完整回答
反对 回复 2022-01-09
  • 1 回答
  • 0 关注
  • 187 浏览

添加回答

举报

0/150
提交
取消
微信客服

购课补贴
联系客服咨询优惠详情

帮助反馈 APP下载

慕课网APP
您的移动学习伙伴

公众号

扫描二维码
关注慕课网微信公众号