前言
边工作边转型,对象的思想对于初学者是非常重要的。具备一定的代码识别和理解能力后,我决定边做项目边学习。前些阶段小项目中查询数据的时候使用了Linq,那就从它开始。
正文
1、对于数组:
1: using System;
2: using System.Collections.Generic;
3: using System.Linq;
4: using System.Text;
5: using System.Threading.Tasks;
6:
7: namespace ConsoleApplication1
8: {
9: class LinqTest
10: {
11: static void Main(string[] args)
12: {
13: string[] names = { "Alone","Lisi","Samba","Fatimah","Sam","Ssn"};
14: //第一种使用原生态的查询语句的方法
15: var queryResult = from n in names
16: where n.StartsWith("S")
17: orderby n descending
18: select n;
19:
20: //第二种方法使用Linq的方法
21: // var queryResult = names.OrderByDescending(n=>n).Where(n=>n.StartsWith("s"));
22:
23: foreach (var Items in queryResult)
24: {
25: Console.WriteLine(Items);
26: }
27: Console.ReadKey();
28:
29: }
30: }
31: }
结果:
Ssn
Samba
Sam
许多都是在一行代码中完成的,对于以上的这样最简单的查询,方法语言要比查询语法更加简短。
var queryResult = from n in names
//n为数据中的代表,有点像foreach。迭代,Linq数据源必须是是可枚举的——即必须是数组和集合以便从中选择一个或者多个元素
where n.StartsWith("S")
//使用where语句,当然限制的条件可以是其他如(where n.Length>10)或者(where n.Contains("Q"))
//若n为数字这可以使用 where n<1000
orderby n descending
//降序 //orderby n 默认为升序 //orderby n.Substring(n.Length-1)//按最后一个字母来排序
select n;
// 指定结果集中包含哪一些元素。这里就是一个集合里面就只是字符串,所以就只要查询n这个对象就好了
var queryResult = names.OrderByDescending(n=>n).Where(n=>n.StartsWith("s"));
//c#编译器把Lambda表达式n=>n.StartsWith("s")编译成一个匿名方法 ,Where()方法在names数组上的每一个元素执行这个方法
//如果Lamdba表达式给某个元素返回的是true,那么该元素就包含在Where返回的结果集中
//OrderByDescending(n=>n)为降序,OrderBy(n=>n)为升序
2、对于聚合函数:
Count() | 结果中的个数 |
Min() | 结果中的最小值 |
Max() | 结果中的最大值 |
Average() | 数字结果的平均值 |
Sum() | 所有数字结果的总和 |
使用方法:
queryResult.Count()
queryResult.Min()
queryResult.Max()
queryResult.Average()
queryResult.Sum(n=>(long)n) //怕超出范围使得导致溢出错误,n为int的时候