一.本节学习LinQ的扩展方法
LinQ的where返回的IEnumerable,所有的括号中都可以写lamada表达式,list,数组等都可以用LinQ
以下这些方法都是可以和Where一起使用的
Count():返回的是满足条件的个数
Any():判断集合中是否存在一条数据,返回的是布尔类型
//下面这4个方法返回的是对象
Single():有且只有一条数据,First():至少有一条,返回第一条数据,
以上这两个是程序员确定集合里面存在符合条件的记录,没有的话如果使用这两个方法的话,会抛出异常
SingleOrDefault():最多只有一条满足要求的数据,0条记录则会返回0或者null,当有多条数据时会报错
FirstOrDefault():返回第一条或者默认值,会在没有记录的时候返回null,所以建议在编程的时候使用这个方法
一般不建议使用异常报错后再处理的方式,因为会比自己处理异常的方法效率低很多
//下面这两个返回的是排序后的集合
OrderBy():对数据进行正序排序
OrderByDescending():倒序排序
OrderBy().ThenBy():先以一个条件排序,再以另一个条件排序
//下面这两条一般用于分页
Skip(n):跳过n条数据,
Take(n):获取n条数据,不足n条获取全部
//常用聚合函数
Max():获取最大值
Min():获取最小值
Average():获取平均值
Sum():求和运算
Count():求个数
//分组函数,每个分组后的返回值是int:数量 IEnumerable本组集合
GroupBy():返回值为IEnumerable<IGrouping<int,T>>
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)
{
List<Employe> list=new List<Employe>();
list.Add(new Employee{id=1,Name="1",Age=1});
list.Add(new Employee{id=2,Name="2",Age=2});
list.Add(new Employee{id=3,Name="3",Age=3});
IEnumerable<Employee> itemsWhere=list.where(t=>t.Age>2);
int EntityCount=list.Count(t=>t.Age>2);
bool Flag=list.Any(t=>Age>2);
IEnumerable<Emplyee> Items=list.OrderBy(t=>t.Age)
var item2=list.OrderByDescending(e=>rand.Next());
var itemOrder=list.Orderby(t=>t.id).ThenBy(t=>t.Age)
//跳过第一条数据从第2条开始获取2条数据
var SkipTake=list.Skip(1).Take(2)
//分组当然可以使用var类型推断
IEnumerable<IGrouping<int,Employe>> items=list.GroupBy(e=>e.Age);
foreach(IGrouping<int,Employe> ig in items)
{
Console.Writeline(ig.Key);
foreach(Employe e in ig)
{
Console.WriteLine(e);
}
Console.WriteLine("******");
}
}