2.3 LINQ

简介: .net core LINQ

2.3 LINQ

实现了IEnumerable<T>接口的类都可以使用LINQ中的方法。

数据过滤 where()

IEnumerable<Employee>list1=list.Where(e=>e.Salary>2500&&e.Age<35);

foreach (Employeeeinlist1)

{

   Console.WriteLine(e);

}

获取数据条数 count()

intcount1=list.Count(e=>e.Salary>5000||e.Age<30);

intcount2=list.Where(e=>e.Salary>5000||e.Age<30).Count();

至少一条满足条件的数据Any()

//只要有符合的数据就停止

boolb1=list.Any(e=>e.Salary>8000);

boolb2=list.Where(e=>e.Salary>8000).Any();

获取一条数据Single、SingleOrDefault、First、FirstOrDefault

方法 解释
Single 有且只有一条数据,如果没有数据或者数据大于1,则报错
SingleOrDefault 最多只有一条数据,如果没有数据,则返回类型默认值,如果多余1条,则报错
First 有一条或多条,则返回第一个,无数据则报错
FirstOrDefault 有数据,则返回第一个,否则返回了类型默认值

Employeee1=list.Single(e=>e.Id==6);

Console.WriteLine(e1);

Employee?e2=list.SingleOrDefault(e=>e.Id==9);

if (e2==null)

{

   Console.WriteLine("没有Id==9的数据");

}

else

{

   Console.WriteLine(e2);

}

Employeee3=list.First(e=>e.Age>30);

Console.WriteLine(e3);

Employee?e4=list.FirstOrDefault(e=>e.Age>30);

if (e4==null)

{

   Console.WriteLine("没有大于30岁的数据");

}

else

{

   Console.WriteLine(e2);

}

Employeee5=list.First(e=>e.Salary>9999);

排序 OrderBy

varorderedItems1=list.OrderBy(e=>e.Age);//正序

varorderedItems2=list.OrderByDescending(e=>e.Salary);//倒叙

限制结果集 Skip

varorderedItems1=list.Skip(2).Take(3);

list.Skip(2);//跳过2条数据

list.Take(2);//获取list前2条数据

聚合函数 Max、Min、Avg、Sum、Count

intmaxAge=list.Max(e=>e.Age);

longminId=list.Min(e=>e.Id);

intminSalary2=list.Where(e=>e.Age>30).Min(e=>e.Salary);

分组 GroupBy

返回值为IEnumerable<IGrouping<TKey, TSource>>类型TKey和分组条件表达式类型一致

IEnumerable<IGrouping<int, Employee>>items=list.GroupBy(e=>e.Age);

foreach (IGrouping<int, Employee>iteminitems)

{

   intage=item.Key;

   intcount=item.Count();

   intmaxSalary=item.Max(e=>e.Salary);

   doubleavgSalary=item.Average(e=>e.Salary);

   Console.WriteLine($"年龄{item.Key},人数{count},最高工资{maxSalary},平均工资{avgSalary}");

}

投影 select

IEnumerable<string>names=list.Select(e=>e.Gender?"男" : "女");//将bool转换为男女

//使用匿名属性

varitems=list.Select(e=>new { e.Name, e.Age, XingBie=e.Gender?"男" : "女" });

foreach (variteminitems)

{

   stringname=item.Name;

   intage=item.Age;

   stringxingbie=item.XingBie;

   Console.WriteLine($"名字={name},年龄={age},性别={xingbie}");

}

集合转换 ToArray、ToList

查询语法

varitems2=fromeinlist

           wheree.Salary>3000

           orderbye.Age

           selectnew { e.Name, e.Age, Gender=e.Gender?"男" : "女" };


相关文章
|
10月前
|
XML SQL 开发框架
LINQ初步
C#中的LINQ入门学习
48 0
|
开发框架 .NET Serverless
C# Linq语言集成查询
C# Linq语言集成查询