.Net6.0系列-7 .Net 6LinQ(三)常用扩展方法

25 篇文章 0 订阅
8 篇文章 0 订阅

一.投影:把集合中的每一项转换为另一种类型使用的是Select()方法
where()的返回集合是Enumerable,返回的是T的全部字段,而Select是可以返回集合的任意需要的字段
find()是在lamada表达式中的使用,以上两个是LinQ的使用

匿名类型的使用情形,在传递多个参数的时候可以使用匿名类型

匿名类型与Select()可以映射出新的集合
二 集合转换
可以使用ToArray()方法和ToList()方法分别把IEnumerable转换为数组类型和List类型

三 链式编程:多条件一起查询

四 LinQ使用建议:当需要计算大量数据,并需要瞬间完成的时候不建议使用LinQ,如图形处理图片中的每一个像素点的时候,需要瞬间完成,并将图片瞬间显示出来可以使用三元运算符/或者Math/或者自己使用基础算法写

class Employee
{
	public int id{get;set;}
	public string Name{get;set;}
	public int Age{get;set;}
	public override string ToString()
	{
		return $"id={id},Name={Name},Age={Age}";	
	}
}
static void main(string[] args)
{
	//匿名类型
	var obj=new {Name="abc",age=12,Sex="男"};
	List<Employe> list=new List<Employe>();
		
	list.Add(new Employee{id=1,Name="1",Age=1,Salary=10});
	list.Add(new Employee{id=2,Name="2",Age=2,Salary=20});
	list.Add(new Employee{id=3,Name="3",Age=3,Salary=30});
	//取出集合中的所有Name
	IEnumerable<string> Iitems=list.select(t=>t.Name);	
	
	//匿名类型var与select()使用新生成
	var items=list.Select(e=>new {MingCheng=e.Name,DaXiao=e.Age>=2?"老":"幼"});
	//分清哪个用e哪个用g
	var items1=list.GroupBy(e=>e.Age).Select(g=>new {Nianling=g.Key,MaxS=g.Max(e=>e.Salary),MinS=g.Min(e.Salary),RenShu=g.Count()});
	//ToArray()方法和ToList()方法
	List<Employee> listEmployee=list.ToList();
	Employee[] ArrEmployee=list.ToArray();
	//链式编程范例
	var itemsLS=list.Where(e=>e.id>=1).GroupBy(e=>e.Age).OrderBy(g=>g.Key).Takes(3).Select(g=>new{NianLing=g.Key,RenShu=g.Count(),PingJunGongZi=g.Average(e=>e.Salary)});
	//统计字符串中每个字符出现的次数,并依据频率排序,出现次数大于两次的集合
	string s="ni hao!wo xi huan bian dai ma";
	var items=s.Where(c=>char.IsLetter(c)).Select(c=>Char.ToLower(c)).GroupBy(c=>c).Select(g=>new{g.Key,Count=g.Count()}).OrderByDescending(g=>g.Count).Where(g=>g.Count>2);
	}

如果先分组在排序如下:
var result = _dbContext
.TransRecord
.GroupBy(g => g.TransType)
.Select(s => s.OrderByDescending(o => o.Date)

.FirstOrDefault());

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值