实在是烦死每次要自己写循环找东西了~
1.选择查找(where)
where查询用来查找满足要求的内容,会返回一个迭代器,可以foreach遍历迭代器,也可以tolist把查询结果转成一个新的List存储。
1 2 |
//查询列表中length>10的项 var result = stringList.Where(p => p.Length > 10).ToList(); |
2.简单的计算(min,max,sum,average,count)
一些简单的数据计算也可以使用linq进行计算(结果类型与匿名函数的查找类型相同):
1 2 3 4 5 |
int min = stringList.Min(p => p.Length);//最小值 float max = floatList.Max();//最大值 int sum = stringList.Sum(p=>p.Length);//合 int average = stringList.Average(p=>p.Length);//平均值 int count = stringList.Count(p=>p.Length>10);//满足条件的个数 |
3.排序(orderby)
排序与筛选功能
1 2 3 4 |
//正序,先筛选出满足条件的元素,后排序 var result = stringList.Where(p=>p.Length>10).OrderBy(p=>p.Length); //倒序 var result = stringList.Where(p=>p.Length>10).OrderByDescending(p=>p.Length); |
4.取第一个/最后一个元素(First,Last)
取列表中的第一个元素,有两个接口,FirstOrDefault
和 First
,主要区别就是first在取不到的时候会抛出异常,FirstOrDefault在没取到的时候返回null
1 2 3 |
string result = stringList.First(p=>p.Length>10); string result = stringList.FirstOrDefault(p=>p.Length>10); string result = stringList.Last(p=>p.Length>10); |
5.跳过数据,取指定数量数据(skip,take)
比如对指定数据进行分页查询,比如第一页显示10条数据,现在要查第二页的数据(取第11到20条数据)
1 |
var result = stringList.OrderByDescending(p=>p.Length).Skip(10).Take(10).ToList(); |
6.选择指定数据(select)
当你只想查元素内的指定一种数据时,可以使用select进行查询,返回的将是一个指定类型的迭代器
1 2 |
//返回一个遍历length的迭代器 var result = stringList.Select(p=>p.Length); |
7.查询特定类型(oftype)
例如我有一个object的list,其中元素存储了string和int,那么我可以使用oftype获取我想要的类型
1 2 3 4 5 6 7 8 |
List<object> objList = new List<object>() { "test", 1, 2.45f, "test2", }; var result = objList.OfType<string>(); |
8.去重(Distinct)
这个去重只能对元素进行去重
1 2 |
List<int> intList = new List<int>(){1,2,1,3,2}; var result = intList.Distinct(); |
如果想要根据元素内的某个字段进行去重,需要自己实现一下IEqualityComparer接口。实现其中的Equals函数进行想要的去重逻辑。
9.判断是否满足条件(Any,All)
Any:只要存在满足条件的则为true.
All:全都满足条件才返回true.
1 2 |
bool any = stringList.Any(p=>p.Length>10); bool all = stringList.All(p=>p.Length>10); |
10.将一个集合与另一个集合用指定建合并,返回合并后的集合(Join)
Join使用了两个集合,需要两个集合的查找器,以及最后结果的迭代器。
1 |
var result = stringList1.Join(stringList2, list1Ele=>list1Ele.Length, list2Ele=>list2Ele.Length, (p,r)=>new{pList = p, rList = r}); |