首页 > 其他分享 >Linq GroupBy() 和 ToLookup()

Linq GroupBy() 和 ToLookup()

时间:2024-02-05 17:35:36浏览次数:23  
标签:Category Product Name list Linq ToLookup new Id GroupBy

using System;
using System.Collections.Generic;
using System.Linq;

public class Program
{
  public static void Main()
  {
    var list = new List<Product>{
      new Product{ Id=1, Name="Name1", Category="A"},
      new Product{ Id=2, Name="Name2", Category="A"},
      new Product{ Id=3, Name="Name3", Category="B"},
      new Product{ Id=4, Name="Name4", Category="B"},
      new Product{ Id=5, Name="Name5", Category="C"},
    };

    var groups = list.GroupBy(p => p.Category);
    list.RemoveAll(p => p.Category =="B");
    Console.WriteLine(string.Join("-", list.Select(p => p.Name)));
    foreach(var g in groups){
      Console.WriteLine($"{g.Key} : {string.Join("-", g.Select(p => p.Name))}");
    }
Console.WriteLine("*****************************************");
    list = new List<Product>{
      new Product{ Id=1, Name="Name1", Category="A"},
      new Product{ Id=2, Name="Name2", Category="A"},
      new Product{ Id=3, Name="Name3", Category="B"},
      new Product{ Id=4, Name="Name4", Category="B"},
      new Product{ Id=5, Name="Name5", Category="C"},
    };
    var lookup = list.ToLookup(p => p.Category);
    list.RemoveAll(p => p.Category =="B");
    Console.WriteLine(string.Join("-", list.Select(p => p.Name)));
    foreach(var lk in lookup){
      Console.WriteLine($"{lk.Key} : {string.Join("-", lk.Select(p => p.Name))}");
    }
  }

}

public class Product{
  public int Id {get;set;}
  public string Name {get;set;}
  public string Category {get;set;}
}

输出:

Name1-Name2-Name5
A : Name1-Name2
C : Name5
*****************************************
Name1-Name2-Name5
A : Name1-Name2
B : Name3-Name4
C : Name5
可见ToLookup做了深拷贝,没有受延迟加载的影响

Try it!

标签:Category,Product,Name,list,Linq,ToLookup,new,Id,GroupBy
From: https://www.cnblogs.com/RocCnBlog/p/18008522

相关文章

  • SqlServer使用GroupBy分组时, 设置当查询不到某个分组时, 默认赋值一个0
    现在有个需求,需要将分组查询并统计个数后返回数据,但是当数据中没有对应的分组时就查询不到对应的数据,比如使用下面的Sql语句查询(State为Table1的字段,值为int类型)点击查看代码select caseState when0then'开工' when1then'等待' when2then'完工' ......
  • C#之linq和lamda表达式GroupBy分组拼接字符串
    业务需求:点击提示信息,如:“售后单【SH001】序列号【001,002,006】;售后单【SH002】序列号【003,007,009】。已经过了质保期,确认要继续关闭吗” 核心代码://lamda表达式varerrorMsgObj=getNoPay.GroupBy(s=>s["FBILLNO"]+"").Select(d=>new{......
  • linq 查询关于 from子句
    这玩意儿不是强制的,已经测试了解,varx=fromiinsource... 这是linq中标准的from子句的写法,它默认会定义两个变量位置一个是上式所示的i另一个是source,一般来说按要求source需要是可枚举的即它能够被foreach,一般所有集合类型都是可枚举的,但是就算source是一个一般的类不......
  • c# linq-to-sql 连接sqlserver数据库
    在已有项目下,点击新建项: 输入服务器名称:详见sqlserver登录页,如下所示:其中服务器名称、登录名、密码一一对应。且登录名必须为sa 接着选择连接的数据库名称-》点击测试连接,测试是否正常连接数据库。点击确认完成创建。 完成增删改查操作代码示例:///<summary>///......
  • C# .NET 中 LINQ to Entities查询中使用时转换为数据库函数的CLR方法(EF.Functions)
    EF.Functions映射由于并非所有数据库函数都有等效的C#函数,因此EFCore提供程序提供了特殊的C#方法来调用某些数据库函数。这些方法通过EF.Functions定义为扩展方法来用于LINQ查询中。这些方法是特定于提供程序的,因为它们与特定数据库函数密切相关。因此,适用于某个......
  • 使用LINQ、Lambda 表达式 、委托快速比较两个集合,找出需要新增、修改、删除的对象
    快速对比两个list数据集合此文引用csdn:https://blog.csdn.net/Zhu_daye/article/details/104798410小批量、快速对比两个list数据集合usingSystem.Linq.Expressions;Main();voidMain(){//对比源集合varsource=GenerateStudent(1,10000,1000);//......
  • C#中var关键字详解:强类型、匿名类型和LINQ查询的妙用!
     在C#中,var关键字是强类型的,因为它在编译时会根据变量的初始化表达式推断出变量的实际类型,并且一旦确定了类型,就不能再更改。这种类型推断是在编译时进行的,因此代码中的变量在运行时是具有明确定义类型的。下面是一个简单的示例,说明var的强类型特性以及使用时的一些注意事项:......
  • 【flink番外篇】9、Flink Table API 支持的操作示例(6)- 表的聚合(group by、Distinct、
    文章目录Flink系列文章一、maven依赖二、示例:表的聚合操作1、示例代码公共部分2、groupby3、GroupByWindowAggregation4、OverWindowAggregation5、DistinctAggregation6、Distinct本文给出了关于表数据的聚合操作示例,比如groupby、distinct、以及groupby、over、distin......
  • 为什么大多数语言都不支持LINQ机制?
    C# 3.0可以说是C#历史上最大的一次改动,从语言到库的层面可以说是做了革命性的变化,单单是上下文关键字,就一次性新增了from、where、select、group、by、join、equals、on、let、order、into、asscending、descending一大堆,加上原有的in啥的。这特么就是重新设计了一个新的语言。......
  • linq和lambda
    LINQ:LINQ(LanguageIntegratedQuery)是.NETFramework3.5中引入的一个功能,它提供了一种统一的查询语法,使得我们可以在C#代码中直接使用类似SQL的查询语句来查询和操作各种数据源,如集合、数据库、XML等。LINQ使用标准查询运算符(如Where、Select、OrderBy等)来完成查询任务......