.NET——LINQ(语言集成查询二)

一、投影:把集合中的每一项转换为另外一种类型。

在linq中,select 子句可以指定将在执行查询时产生的值的类型。 该子句的结果将基于前面所有子句的计算结果以及 select 子句本身中的所有表达式。 查询表达式必须以 select 子句或 group 子句结束。
Select操作包括7种形式,分别为简单用法、匿名类型形式、条件形式、筛选形式、嵌套类型形式、本地方法调用形式、Distinct形式.。

//映射规则 只取年龄
IEnumerable<int> items1=list.Select(x => x.Age);
foreach (int i in items1)
{
    Console.WriteLine(i);
}

//也可以多种条件重复使用
IEnumerable<string> items1 = list.Select(x => x.Age+" "+x.Name);
foreach (string i in items1)
{
    Console.WriteLine(i);
}



//也可以与where语句结合
IEnumerable<string> items2 = list.Where(e=>e.Age>30&&e.Gender==true).Select(x => x.Age + " " + x.Name);
foreach (string i in items2)
{
    Console.WriteLine(i);
}

二、一些Linq的组合嵌套使用

//用一个新类来分组,值都放到这个组里面
IEnumerable<Dog> items3 = list.Select(e => new Dog { NickName = e.Name, Age = e.Salary });
foreach (Dog  dog in items3)
{
    Console.WriteLine($"{dog.NickName},{dog.Age}");
}

//利用var简化编程
var items2 = list.Select(e => new
{
    XingMing = e.Name,
    NingLing = e.Age,
    Xingbie = e.Gender ? "男":"女"
}) ;
foreach (var item in items2)
{
    Console.WriteLine(item.XingMing+item.Xingbie+item.NingLing);
}


//结合groupby+投影+匿名类型
var items = list.GroupBy(e => e.Age).Select(g => new
{
    nianling = g.Key,
    Maxs = g.Max(e => e.Salary),
    Mins = g.Min(e => e.Salary),
    rengshu = g.Count(),
    name = g.First().Name
});

foreach (var i in items)
{
    Console.WriteLine(i.nianling+","+i.Maxs+","+i.Mins+","+i.rengshu+","+i.name);
}


//获得工资大于6000的数据,使用ToArray转换成数组或者list
IEnumerable<Employee> items1 = list.Where(e => e.Salary > 6000);
Employee[] employees = items1.ToArray();
items1.ToList();*/
//获取ID>2的数据,然后按照Age分组,然后取出前三条,最后在投影取得年龄,人数,平均工资
var items=  list.Where(e => e.ID > 2).GroupBy(e => e.Age).OrderBy(g => g.Key).Take(3).Select(g => new
{
    nianling = g.Key,
    rs = g.Count(),
    pinjunxinzhi = g.Average(e => e.Salary)
});
foreach(var i in items)
{
    Console.WriteLine(i.rs + "," + i.nianling + "," + i.pinjunxinzhi); ;
}

附录:C# LINQ 中Count()方法

LINQ代码库中的Count方法作为数据统计的关键方法,经常被使用。在统计数据时候,Count方法是否每次都要遍历整个序列来获取序列元素个数,Count方法内容是否存在优化机制。为了更好的了解该方法的工作原理,我们从源码的角度对其进行分析。

详细可参考C# LINQ源码分析之Count_c# count_懒人Ethan的博客-CSDN博客

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值