首页 > 其他分享 >LINQ~什么时候使用SelectMany和GroupBy

LINQ~什么时候使用SelectMany和GroupBy

时间:2022-12-12 23:06:19浏览次数:41  
标签:Name Pet Age LINQ Id pet new GroupBy SelectMany

 class PetOwner
{
public string Name { get; set; }
public List<Pet> Pet { get; set; }
}

class Pet
{
public int Id { get; set; }
public string Name { get; set; }
public int Age { get; set; }
}
class Program
{
static void Main(string[] args)
{
PetOwner[] petOwners =
{ new PetOwner { Name="zzl",
Pet = new List<Pet>{new Pet{Id=1,Name="小狗"},new Pet{Id=2,Name="小猫"},new Pet{Id=3,Name="小老虎"} } },
new PetOwner { Name="zql",
Pet = new List<Pet>{new Pet{Id=1,Name="小狗"} } },
new PetOwner { Name="zhz",
Pet = new List<Pet>{new Pet{Id=1,Name="小狗"},new Pet{Id=3,Name="小老虎"} } },
};

List<Pet> PetList = new List<Pet>
{
new Pet { Id = 1, Name = "小狗",Age=1 },
new Pet { Id = 2, Name = "小猫",Age=2 },
new Pet { Id = 3, Name = "小老虎",Age=1},
new Pet { Id = 4, Name = "小蛇",Age=3 },
new Pet { Id = 5, Name = "小蝎子",Age=2 },
new Pet { Id = 6, Name = "小兔子",Age=3},
};

#region 不知道SelectMany之前,选择LIST是多么的悲哀
List<Pet> query2 = new List<Pet>();
petOwners.AsQueryable().Where(i => i.Name == "zzl").ToList().ForEach(i =>
{
query2.AddRange(i.Pet);
});
foreach (Pet pet in query2)
Console.WriteLine(pet.Name);
#endregion

#region 有了SelectMany,我们的代码的可读及执行效率上都有所提高
List<Pet> query1 = petOwners.AsQueryable().Where(i => i.Name == "zzl")

.SelectMany(i => i.Pet).ToList();

query1.ForEach(i => Console.WriteLine(i.Name));
#endregion

#region GroupBy 在集合中根据某个字段进行分组
var query = PetList.AsQueryable().GroupBy(pet => pet.Age);
foreach (var ageGroup in query)
{
Console.WriteLine("Pet s' Age group: {0} Number of pets: {1}",

ageGroup.Key, ageGroup.Count());

}
#endregion

#region 对age属性进行分组,并把name显示出来
IEnumerable<IGrouping<int, Pet>> query3 =
PetList.AsQueryable().GroupBy(pet => pet.Age, pet => pet);

foreach (IGrouping<int, Pet> petGroup in query3)
{
Console.WriteLine(petGroup.Key);
foreach (Pet pet in petGroup)
Console.WriteLine(" {0}", pet.Id+"..."+pet.Name);
}
#endregion


Console.ReadKey();
}
}

作者:仓储大叔,张占岭,
荣誉:微软MVP

标签:Name,Pet,Age,LINQ,Id,pet,new,GroupBy,SelectMany
From: https://blog.51cto.com/u_15765017/5932119

相关文章

  • 当你使用LINQ做底层时,最好设计一个工厂,不要把LINQ的动作暴露给业务层
    1:usingSystem;2:usingSystem.Collections.Generic;3:usingSystem.Linq;4:usingSystem.Text;5:usingSystem.Data.Linq;6:usingSystem.Threading;......
  • 微软的Linq方法太少?用MoreLinq试试,多到用不过来
    如果你用Linq语法进行多表关联,就少不了下面这种语法。说实话,不清楚微软当时这样架构有什么想法或好处,总是看着很别扭。像SQL语句那样直接LeftJoin不香吗?比如将数据插入到源......
  • JAVA8 lambda之groupby三种用法
    一,有一个参数的groupby第一个参数:按照该参数规则进行分组。结果返回一个Map集合,Map的key是按照该规则执行后返回的每个结果,Map的value是一个List集合,该集合中的值是能满足......
  • 重学c#系列——linq(1) [二十七]
    前言简单介绍一下linq,linq很多人其实用的很熟练了,但是有些人不知道自己用的是linq。正文在介绍linq之前,先介绍一下集合。publicinterfaceICollection<T>:IEnume......
  • LinqPad基本使用
    LinqPadThe.NETProgrammer’sPlayground(.net开发的乐园)主要作用:快速开发(小例子、新库测试、Demo等)快速数据库链接(EFcore+LinqToDB)丰富的结果展示(支持富输出(层......
  • LINQ教程
    在说LINQ之前必须先说说几个重要的C#语言特性一:与LINQ有关的语言特性1.隐式类型(1)源起在隐式类型出现之前,我们在声明一个变量的时候,......
  • DAX:GROUPBY函数
    DAX中的SUMMARIZE函数功能强大,但同时也很难使用。它可用于执行表之间的分组和连接,正如我们之前在分组数据一文中描述的那样。不幸的是,它在计算聚合值时存在一些众所周......
  • LINQ学习
     varrest=frommastinmasterwheremast.level>6selectmast; //from后面设置查询的集合、where后面跟查询条件、表示mast的结果集合返回多条件:wheremast.......
  • EF使用LINQ和Lamda实现SQL查询的内连接(INNER JOIN)和左连接(LEFT JOIN)
    摘自:https://www.freesion.com/article/7263358177/ 背景介绍:1.OperateLogInfo:日志表2.SystemUserInfo:用户表需求:查询日志表,要根据日志表的创建人id查询出创建人姓名(日志......
  • C# LINQ2
    //首先说一下匿名方法:,无名字,//无参数匿名函数staticvoidMain(string[]args){Actionf1=delegate(){console.WriteLine("我是AAA");};//给委托赋值一个匿名方法f1......