LINQ按多列分组(Group By)并计算总和(Sum)

基于3D打印与Arduino的微型轴流涡轮机DIY:从设计到推力测试 涡轮机械是流体力学与动力工程的核心领域,其基本原理是通过旋转叶轮对流体做功,实现能量转换。在工程实践中,无刷直流电机(BLDC)配合电子调速器(ESC)可精准控制高速转子,而3D打印技术则让复杂叶轮与流道结构的快速原型制作成为可能。这种技术组合为创客与教育领域提供了低成本验证气动推进方案的平台,尤其适用于微型推进器、教学演示装置及航模动力系统的开发。本文以轴流式涡轮机为例,详细解析了利用PETG材料打印叶轮、进行动平衡校正,并通过Arduino生成PWM信号控制电调实现转速调节的全流程,涵盖了从部件选型、系 阅读详情
AI摘要

本文介绍了如何在C#中使用LINQ进行多列分组(GroupBy)并计算总和(Sum)。通过示例展示了三种不同的方法,包括Lambda表达式和标准查询表达式,分别应用于商品交易数据和员工信息数据,实现按年龄和性别分组并计算员工数量。这些方法充分利用了匿名类型,适用于处理复杂的数据聚合操作。

LINQ按多列分组(Group By)并计算总和(Sum)

SQL语句:

SELECT * FROM <TableName> GROUP BY <Column1>,<Column2>

QuantityBreakdown
(
    MaterialID int,
    ProductID int,
    Quantity float
)

INSERT INTO @QuantityBreakdown (MaterialID, ProductID, Quantity)
SELECT MaterialID, ProductID, SUM(Quantity)
FROM @Transactions
GROUP BY MaterialID, ProductID

在C#中,如何使用LINQ实现以上SQL语句中的需求呢?方式归纳如下:

方式一

var query = (from t in Transactions
             group t by new {t.MaterialID, t.ProductID}
             into grp
                    select new
                    {
                        grp.Key.MaterialID,
                        grp.Key.ProductID,
                        Quantity = grp.Sum(t => t.Quantity)
                    }).ToList();

方式二

from grouping in list.GroupBy(x => new Tuple<string,string,string>(x.Person.LastName,x.Person.FirstName,x.Person.MiddleName))
select new SummaryItem
{
    LastName = grouping.Key.Item1,
    FirstName = grouping.Key.Item2,
    MiddleName = grouping.Key.Item3,
    DayCount = grouping.Count(), 
    AmountBilled = grouping.Sum(x => x.Rate),
}

方式三

var Results= query.GroupBy(x => new { x.Column1, x.Column2 });

易错提醒:

grp.Key.ProductID, //前往不要忘了Key!!!
Quantity = grp.Sum(t => t.Quantity) //必须取别名Quantity !!!

C# list集合对多个字段group by 、并新增字段

void Main()
{
     var  empList =new List<Employee>
     {
        new Employee {ID = 1, FName = "John", Age = 23, Sex = 'M'},
        new Employee {ID = 2, FName = "Mary", Age = 25, Sex = 'F'},
        new Employee {ID = 3, FName = "Amber", Age = 23, Sex = 'M'},
        new Employee {ID = 4, FName = "Kathy", Age = 25, Sex = 'F'},
        new Employee {ID = 5, FName = "Lena", Age = 27, Sex = 'F'},
        new Employee {ID = 6, FName = "Bill", Age = 28, Sex = 'M'},
        new Employee {ID = 7, FName = "Celina", Age = 27, Sex = 'F'},
        new Employee {ID = 8, FName = "John", Age = 28, Sex = 'M'}
     };
         
    // query with lamda expression g.Key代表Age和Sex两字段,Count为新增字段<br>        // 最终返回的集合QueryWithLamda包含字段:Age、Sex、Count
    var QueryWithLamda = empList.GroupBy(x => new { x.Age,  x.Sex})
                .Select(g=>new {g.Key, Count=g.Count()});
     
    //query with standard expression<br>        //返回结果同上
    var query=from el in empList
              group el by new {el.Age,el.Sex} into g
              select new {g.Key, Count=g.Count()};
  
    foreach (var employee in query /* Or  QueryWithLamda */ )
             Console.WriteLine(employee.Count);
      
}
 
public class Employee
{
  public int ID {get;set;}
  public string FName {get;set;}
  public int Age {get;set;}
  public char Sex {get;set;}
}

Linq 中按照多个值进行分组(GroupBy)

/// <summary>要查询的对象</summary>
class Employee {
   public int ID { get;set; }
   public string FName { get; set; }
   public int Age { get; set; }
   public char Sex { get; set; }
}

如果对这个类的Age和Sex的连个字段进行分组,方法如下:

// 先造一些数据
List<Employee> empList = new List<Employee>();
empList.Add(new Employee() {
   ID = 1, FName = "John", Age = 23, Sex = 'M'
});
empList.Add(new Employee() {
   ID = 2, FName = "Mary", Age = 25, Sex = 'F'
});

empList.Add(new Employee() {
   ID = 3, FName = "Amber", Age = 23, Sex = 'M'
});
empList.Add(new Employee() {
   ID = 4, FName = "Kathy", Age = 25, Sex = 'M'
});
empList.Add(new Employee() {
   ID = 5, FName = "Lena", Age = 27, Sex = 'F'
});

empList.Add(new Employee() {
   ID = 6, FName = "Bill", Age = 28, Sex = 'M'
});

empList.Add(new Employee() {
   ID = 7, FName = "Celina", Age = 27, Sex = 'F'
});
empList.Add(new Employee() {
   ID = 8, FName = "John", Age = 28, Sex = 'M'
});

接下来的做法是:

// 实现多key分组的扩展函数版本
var sums = empList
         .GroupBy(x => new { x.Age, x.Sex })
         .Select(group => new {
            Peo = group.Key, Count = group.Count()
         });

foreach (var employee in sums) {
   Console.WriteLine(employee.Count + ": " + employee.Peo);
}

// 实现多key分组的lambda版本
var sums2 = from emp in empList
            group emp by new { emp.Age, emp.Sex } into g
            select new { Peo = g.Key, Count = g.Count() };

foreach (var employee in sums) {
   Console.WriteLine(employee.Count + ": " + employee.Peo);
}

这个例子中就充分利用了匿名类型。

Modelsim安装教程以及管理员身份运行patch_dll.bat时找不到文件mgls.dll的解决 Modesim安装教程 Modesim版本有很多,但是安装方式大都相同,我们以modesim.10.5为例,电脑使用的是win10 64位,讲一下安装过程中的步骤以及出现问题的解决方法 一 安装 1.首先解压安装包,在解压的安装包内选择应用程序,右键选择管理员运行。 2.稍等一会,有的电脑会弹出是否允许modesim进行更改,选择 是 即可,然后出现下面的界面,点击下一步。 3.弹出此界面选择安装路径,选择安装路径,我是在D盘新建的文件夹,直接把文件夹中的路径复制在框内。文件夹名称切记不要带中文 4. 阅读详情

相关推荐

【深圳】IBM V3500存储维修 更换控制器故障

今天给大家分享的是深圳.福田区一个电商客户公司一台IBM Storwize v3500存储控制器故障从远程诊断 收集日志 分析结果的实际案例,如图所示通过存储管理口登陆进去后直接看到少了一个控制器,经过工程师分析日志后判定为该控制器损坏,接下来更换控制器配件,标准套件的控制器不带子卡和电池,所以需要把故障控制器上的子卡和电池拆下来装到新控制器上,这个电池拆还需要点技巧,接着把新的控制器插回V3500主机,等待大约十分钟后,新控制器指示灯全绿,管理界面看到节点已联机;冠峰科技-爱科技爱分享。

OuYangYuXi的博客 4579

LINQ之Sum

返回LINQ大全首页 Sum() MSDN Sum()易于使用。例如int类型和float类型可以直接通过调用Sum()来获得总值。 public static class Program { static void Main( string[] args ) { int[] intNumbers = new int[] { 1, 4, 3, 4 }; float[] floatNumbers = new float

lcy的博客 3794

Excel COUNTIF函数精确统计全解析:从模糊匹配到精准计数

在数据处理与办公自动化领域,条件计数是数据分析的基础操作,其核心原理在于对特定范围内满足设定条件的单元格进行识别与汇总。Excel中的COUNTIF函数是实现这一功能的常用工具,它通过文本匹配逻辑与通配符机制来执行条件判断。然而,其默认的模糊匹配行为常导致统计结果偏离预期,这正是精确统计的技术价值所在——确保数据汇总的准确性与可靠性,直接影响业务报告、薪酬核算、销售分析等应用场景的决策质量。本文聚焦COUNTIF函数的精确匹配技巧,深入剖析通配符(如星号*和问号?)的转义使用(通过波浪号~),并针对大小写敏

weixin_29040367的博客 357

Linq 中按照多个值进行分组(GroupBy) 后进行求和

List<User> products = new List<User>() { new User(){ Id="1", Name="n1",count1=1}, new User(){ Id="1", Name="n1",count1=2}, new User(){ Id="2", Name="n2",co...

qq165285727的专栏 9986

Quartus ||———基于Verilog HDL的数字秒表设计实验

Quartus ||———基于Verilog HDL的数字秒表设计实验一、实验目的二、实验步骤(一)新建工程(二)添加设计文件(三)综合分析与功能仿真1、综合分析2、功能仿真 一、实验目的 用Verilog HDL设计一个数字跑表,所需引脚和功能如下: 二、实验步骤 (一)新建工程 在创建好工程名称后,选定芯片类型 (二)添加设计文件 新建Verilog文件,键入代码如下 module n_clk_top( input clk, input rese

TBMmagic的博客 5526

医疗领域BGE-M3模型微调全流程:从数据准备到效果评估

本文详细介绍了医疗领域BGE-M3模型的微调全流程,从数据准备到效果评估。通过医疗数据微调,BGE-M3模型在临床问答、病历检索等场景中表现显著提升,能够准确理解医学术语之间的细微差别。文章还提供了实战练习代码和效果评估指标,帮助开发者快速掌握医疗文本嵌入模型的应用技巧。

weixin_29098367的博客 282

无涯教程-Linq SUM()函数

在LINQ中,sum()函数用于计算中项目的总和。下面是在C#中定义LINQ SUM函数的语法,总而言之,列表中的项。

无涯教程 864

【超详细】C#的单例模式

本文详细介绍了C#中的单例设计模式,包括两种实现方式:普通类泛型单例(Singleton<T>)和基于MonoBehaviour的组件单例(MonoSingleton<T>)。单例模式通过私有构造、静态私有实例和公共访问入口确保全局唯一实例,具有节省资源、保证数据一致性等优势。文章分别阐述了两者的核心原理、代码实现、使用场景及注意事项,并提供了日志管理器和音效管理器的具体应用示例。特别强调了多线程安全、初始化时机和避免过度使用等重要原则,为Unity开发中合理运用单例模式提供了全面指导。

grapefruit_lyy的博客 1534

Linq语句分组.GroupBy汇总Sum

var data = Db.SqlQueryable<GPS_WY_DataTrend>(sqlstr); //根据STCD分组 然后汇总每组的HorizontalWY值 var groupdata=data.GroupBy(t => t.STCD).Select(t=>new { STCD=t.STCD, HorizontalWY =SqlFunc.AggregateSum(t.HorizontalWY)}).OrderBy(t=>t.HorizontalWY,OrderBy

weixin_51550627的博客 746

一种白平衡增益计算中白点权重计算简易实现方式

一种白平衡白点距离权重简易实现方式

大熊 384

风光储并网对电力系统稳定性影响的仿真研究

本文研究了风光储并网对电力系统稳定性的影响,基于MATLAB/Simulink平台搭建了IEEE 9节点测试系统的风光储并网模型。研究对比了光储、风储和风光储三种并网配置在多种干扰下的稳定性表现。结果表明:光储系统对频率变化最敏感,风储系统具有更强的功率波动适应能力,而风光储联合系统通过互补效应展现出最佳综合稳定性。储能系统在所有配置中均显著改善了频率恢复性能,验证了其在新能源并网中的关键支撑作用。研究为高比例可再生能源电力系统的稳定运行提供了仿真依据和技术参考。

huanghm88的专栏 154

LINQ按多列分组(Group By)并计算总和(Sum) (转载)

来源:https://codedefault.com/2018/group-by-multiple-columns-and-sum-in-csharp .NET[C#]LINQ按多列分组(Group By)并计算总和(Sum) SQL语句: SELECT * FROM <TableName> GROUP BY <Column1>,<Col...

weixin_30480651的博客 3102

win10 跳过U8环境检测的IE WebControls.rar

win10 安装u8的时候 提示IE WebControls 不通过,这个工具可以欺骗u8的检查。 跳过U8环境检测的IE WebControls。提示导入失败后,重新检测通过。

用c#算成绩的总和_.NET[C#]LINQ按多列分组(Group By)并计算总和(Sum)

.NET[C#]LINQ按多列分组(Group By)并计算总和(Sum),比如我们现在有类似的SQL语句:SELECT * FROM GROUP BY ,QuantityBreakdown(MaterialID int,ProductID int,Quantity float)INSERT INTO @QuantityBreakdown (MaterialID, ProductID, Quan...

weixin_28746213的博客 1318

jre9下载 jdk9

(Java SE Runtime Environment 9.0) 9.0u175 官方最新版 【x86|x64】

霍尼韦尔SoftMaster使用说明

霍尼韦尔SoftMaster使用说明

LinQ语句用group by实现分组

用group by into进行分组 (作者:邱名涛,撰写时间:2019年1月16日) 关键字 说明 from 指定范围变量和数据源 where 根据bool表达式从数据源中筛选数据 select 指定查询结果中的元素所具有的类型或报答形式 group (对查询结果按照键/值执行分组) into 提供了一个标识符,它可以充当对join、group或select 子句...

Q_MingTao 6626

TMS_WebGMaps_1.9.8.0_Full_Source

TMS_WebGMaps_1.9.8.0_Full_Source 全源码 delphi cbuilder

linq group by 多列值 实现

场景是://这么一个LIST, 最终想得到的结果如下: List list = new List(); list.Add(new TestData() { Name="A", Count=3,BatNum="001"}); list.Add(new TestData() { Name = "A", Count = 3,BatNum="001" }); list.Add(new TestData() { Name = "A",

Tim专栏 3万+

sql的 group by 分组;linq的 group by 分组

先来看看 linq的,下面的一段linq 是 ,在 学生导入数据的时候,我们根据学生的手机号码和学生名称进行分组,如果有重复的,我们就筛选出来,用到了 linq的 group by,注意这里是new出来 2个条件来进行分组,分别是telephone和studentname 这2个组成分组的条件,并且是判断分组后是否有重复 (count>1),如果有重复,就添加到 stugroup这...

386

Linq中的group by多表多字段,Sum求和

Linq中的group by多表多字段,Sum求和 //Line to Sql 写法 var data = (from a in Items group a by new { a.GroupId, a.Id } into b //orderby new ComparerItem() ...

weixin_34216196的博客 1332

在LINQ查询中LINQ之Group By的用法

LINQ定义了大约40个查询操作符,如select、from、in、where、group 以及order by,借助于LINQ技术,我们可以使用一种类似SQL的语法来查询任何形式的数据。Linq有很多值得学习的地方,这里我们主要介绍Linq使用Group By。 一、Linq对谁适用 linq的语法通过System.Linq下面的Enumerable类提供支持,通过观察他的签名...

dayon1988的博客 637

LINQ TO SQL ——Group by

分组在SQL中应用的十分普遍,在查询,统计时都有可能会用到它。LINQ TO SQL中同样具备group的功能,这篇我来讲下LINQ TO SQL中关于group的用法。 说明: 1:group 不一定要用到多表查询中,单表查询也是可以的。 2:基本语法: 1>:group 分组后要取的字段...

diehenghan2122的博客 303

Linq to SQL语句之Group By/Having

Group By/Having操作符 适用场景:分组数据,为我们查找数据缩小范围。 说明:分配并返回对传入参数进行分组操作后的可枚举对象。分组;延迟 1.简单形式: 5 var q =from p in db.Products group p by p.CategoryID into g select g; 语句描述:使用Group By按CategoryID划分产品。 说明:from p in db.Products 表示从表中将产品对象取出来。group p by p.Categ.

新手上路的博客 936

linq中group by

本文导读:LINQ定义了大约40个查询操作符,如select、from、in、where、group 以及order by,借助于LINQ技术,我们可以使用一种类似SQL的语法来查询任何形式的数据。Linq有很多值得学习的地方,这里我们主要介绍Linq使用Group By。 一、Linq对谁适用 linq的语法通过System.Linq下面的Enumerable类提供支持,通过观察他的签名,你...

weixin_30621919的博客 147

linq group by 操作

Linq使用Group By 1 1.简单形式: var q = from p in db.Products group p by p.CategoryID into g select g; 语句描述:Linq使用Group By按CategoryID划分产品。 说明:from p in db.Products 表示从表中将产品对象取出来。group ...

gengyigang的专栏 416

Linq中的group by多表多字段

Linq中的group by多表多字段

hddfuuh的博客 4787
上一篇: 在EF core 使用枚举类型
下一篇: 两个List集合取交集、并集、差集
.NET跨平台
博客等级 码龄15年 6066粉丝 738原创
评论 1
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值