Linq中的查询运算符:
- Where, 获得只满足条件的元素
- Select,SelectMany, 针对一个(多个)查询对象,将查询的结果转换成需要的数据形式
- Take,TakeWhile, 获得序列中指定位置之前(Take包括此位置,TakeWhile不包括)的元素
- Skip,SkipWhile, 获得序列中指定位置之后(Skip不包括此位置,SkipWhile包括此位置)的元素
- OrderBy,OrderByDescending, 按升序(降序)方式对原有数据进行排序
- ThenBy,ThenByDescending, 按升序(降序)方式对原有数据进行次要排序
- Reverse, 将原有的数据颠倒排序
- GroupBy, 根据分组条件将数据放入不同的组中
- Distinct 去除数据中重复的值
- Union, 返回二个集合中内唯一的元素,即并集
- Intersect 返回同时出现在二个集合中的元素,即交集
- Except 返回一个集合中有另一个集合中没有的元素,即差集
- ToArray,ToList,ToDictionary, 将集合转换成数组,泛型列表,字典
- OfType 根据指定类型筛选IEnumerable的元素
- First,FirstOfDefault, 返回集合中第一个元素或满足条件的第一个元素(FirstOfDefault没有满足条件的返回默认的值)
- ElementAt,ElementAtOrDefault 返回集合中指定位置的元素(ElementAtOrDefault索引超出范围则返回默认值)
- Range, 生成有关数字的集合
- Repeat 生成一个相关重复值的集合
- Any, 判断序列中是否有元素满足条件
- All, 判断序列中是否所有元素都满足条件
- Contains 判断序列中是否包含指定元素
- Average,Count,Max,Min,Sum 对集合取平均值,计数,取最大值,最小值,总和
View Code
1
//
where条件过滤
2 static void WhereData()
3 {
4 var db = new NorthwindDataContext();
5 var stockBase = from b in db.BaseData2s where b.ID > 10683 select new { b.ID, b.ChiName };
6 foreach (var item in stockBase)
7 {
8 Console.WriteLine(item);
9 }
10 Console.WriteLine();
11 string [] nums = { " fdfd " , " fdfd " , " 32 " , " fsdffsf " , " fdf " , " fdf " , " 4324342 " , " fddffa " };
12 // 过滤字符长度小于索引的值
13 var shortnum = nums.Where((num, index) => num.Length < index);
14 foreach (var item in shortnum)
15 {
16 Console.WriteLine(item);
17 }
18 }
19 // 分区运算符Take,Skip,TakeWhile,SkipWhile
20 static void TakeData()
21 {
22 var db = new NorthwindDataContext();
23 var based = from b in db.BaseData2s select new { b.ID, b.EngName };
24 // 得到前三个的值
25 var first3 = based.Take( 3 );
26 foreach (var item in first3)
27 {
28 Console.WriteLine( " first3:{0}\t{1} " , item.ID, item.EngName);
29 }
30 Console.WriteLine();
31 // 得到第三位后面的值
32 var last = based.Skip( 3 );
33 foreach (var item in last)
34 {
35 Console.WriteLine( " last:{0}\t{1} " , item.ID, item.EngName);
36 }
37 Console.WriteLine();
38 int [] numbers = { 5 , 4 , 8 , 9 , 3 , 0 , 6 , 7 , 2 , 33 };
39 // 得到小于9前面的值
40 var firstLess6 = numbers.TakeWhile(n => n < 9 );
41 // 得到元素值是否不是3的倍数,是则返回当前位置后的元素(包括当前元素)
42 var butfirst2 = numbers.SkipWhile(n => n % 3 != 0 );
43 foreach (var item in firstLess6)
44 {
45 Console.WriteLine( " first6:{0} " , item);
46 }
47 Console.WriteLine();
48 foreach (var item in butfirst2)
49 {
50 Console.WriteLine( " 2:{0} " , item);
51 }
52 }
53
54 // 使用集合运算符Union并集,Intersect交集,Except差集,Distinct移除重复值
55 static void Linq1()
56 {
57 int [] numbers = { 2 , 2 , 3 , 51 , 51 , 5 , 5 };
58 var distinctnumbers = numbers.Distinct();
59 foreach (var item in distinctnumbers)
60 {
61 Console.WriteLine( " distince:{0} " , item);
62 }
63 Console.WriteLine();
64
65 int [] numberA = { 0 , 2 , 4 , 5 , 6 , 8 , 9 };
66 int [] numberB = { 1 , 3 , 4 , 5 , 7 , 8 , 11 };
67 distinctnumbers = numberA.Union(numberB);
68
69 foreach (var item in distinctnumbers)
70 {
71 Console.WriteLine( " Union:{0} " , item);
72 }
73 Console.WriteLine();
74 var intersectnumber = numberA.Intersect(numberB);
75 foreach (var item in intersectnumber)
76 {
77 Console.WriteLine( " Intersect:{0} " , item);
78 }
79 Console.WriteLine();
80 var Exceptnumber = numberB.Except(numberA);
81 foreach (var item in Exceptnumber)
82 {
83 Console.WriteLine( " Except:{0} " , item);
84 }
85 Console.WriteLine();
86 }
87
88 // 使用分组运算符
89 static void LinqGroupBy()
90 {
91 string [] words = { " blueberry " , " chimpanzee " , " abacus " , " banana " , " apple " , " cheese " };
92 // 以字符中的第一个字母分组
93 var wordGroups = from w in words group w by w[ 0 ] into g select new { FirstLetter = g.Key, Words = g };
94 foreach (var item in wordGroups)
95 {
96 Console.WriteLine( " words that start with letter '{0}': " , item.FirstLetter);
97 foreach (var w in item.Words)
98 {
99 Console.WriteLine(w);
100 }
101 }
102
103 var wordgroup2 = words.GroupBy(a => a[ 0 ]);
104 foreach (var item in wordgroup2)
105 {
106 Console.WriteLine( " words that start with letter '{0}': " , item.Key);
107 foreach (var w in item)
108 {
109 Console.WriteLine(w);
110 }
111 }
112 }
113
114 // 元素运算符First,FirstOfDefault
115 static void LinqFirst()
116 {
117 int [] numbers = { 5 , 4 , 1 , 3 , 9 , 8 , 6 , 7 , 2 , 0 };
118 var number = (from n in numbers where n >= 6 select n).First();
119 Console.WriteLine( " First:{0} " , number);
120 // 查询第一个为2的倍数
121 int evenNum = numbers.First(n => n % 2 == 0 );
122 Console.WriteLine();
123 Console.WriteLine(evenNum);
124
125 int [] numbers2 = { };
126 int firstDefault = numbers2.FirstOrDefault();
127 Console.WriteLine( " firstDefault:{0} " , firstDefault);
128 }
129
130 // 限定运算符any,all,contains
131 static void LinqAny()
132 {
133 string [] words = { " blueberry " , " chimpanzee " , " abacus " , " banana " };
134 // 判断是否有字符包含'ba'元素
135 bool afterBa = words.Any(b => b.Contains( " ba " ));
136 Console.WriteLine(afterBa);
137
138 // 判断是否所有字符都包含'ba'元素
139 bool afterAll = words.All(b => b.Contains( " ba " ));
140 Console.WriteLine(afterAll);
141
142 }
2 static void WhereData()
3 {
4 var db = new NorthwindDataContext();
5 var stockBase = from b in db.BaseData2s where b.ID > 10683 select new { b.ID, b.ChiName };
6 foreach (var item in stockBase)
7 {
8 Console.WriteLine(item);
9 }
10 Console.WriteLine();
11 string [] nums = { " fdfd " , " fdfd " , " 32 " , " fsdffsf " , " fdf " , " fdf " , " 4324342 " , " fddffa " };
12 // 过滤字符长度小于索引的值
13 var shortnum = nums.Where((num, index) => num.Length < index);
14 foreach (var item in shortnum)
15 {
16 Console.WriteLine(item);
17 }
18 }
19 // 分区运算符Take,Skip,TakeWhile,SkipWhile
20 static void TakeData()
21 {
22 var db = new NorthwindDataContext();
23 var based = from b in db.BaseData2s select new { b.ID, b.EngName };
24 // 得到前三个的值
25 var first3 = based.Take( 3 );
26 foreach (var item in first3)
27 {
28 Console.WriteLine( " first3:{0}\t{1} " , item.ID, item.EngName);
29 }
30 Console.WriteLine();
31 // 得到第三位后面的值
32 var last = based.Skip( 3 );
33 foreach (var item in last)
34 {
35 Console.WriteLine( " last:{0}\t{1} " , item.ID, item.EngName);
36 }
37 Console.WriteLine();
38 int [] numbers = { 5 , 4 , 8 , 9 , 3 , 0 , 6 , 7 , 2 , 33 };
39 // 得到小于9前面的值
40 var firstLess6 = numbers.TakeWhile(n => n < 9 );
41 // 得到元素值是否不是3的倍数,是则返回当前位置后的元素(包括当前元素)
42 var butfirst2 = numbers.SkipWhile(n => n % 3 != 0 );
43 foreach (var item in firstLess6)
44 {
45 Console.WriteLine( " first6:{0} " , item);
46 }
47 Console.WriteLine();
48 foreach (var item in butfirst2)
49 {
50 Console.WriteLine( " 2:{0} " , item);
51 }
52 }
53
54 // 使用集合运算符Union并集,Intersect交集,Except差集,Distinct移除重复值
55 static void Linq1()
56 {
57 int [] numbers = { 2 , 2 , 3 , 51 , 51 , 5 , 5 };
58 var distinctnumbers = numbers.Distinct();
59 foreach (var item in distinctnumbers)
60 {
61 Console.WriteLine( " distince:{0} " , item);
62 }
63 Console.WriteLine();
64
65 int [] numberA = { 0 , 2 , 4 , 5 , 6 , 8 , 9 };
66 int [] numberB = { 1 , 3 , 4 , 5 , 7 , 8 , 11 };
67 distinctnumbers = numberA.Union(numberB);
68
69 foreach (var item in distinctnumbers)
70 {
71 Console.WriteLine( " Union:{0} " , item);
72 }
73 Console.WriteLine();
74 var intersectnumber = numberA.Intersect(numberB);
75 foreach (var item in intersectnumber)
76 {
77 Console.WriteLine( " Intersect:{0} " , item);
78 }
79 Console.WriteLine();
80 var Exceptnumber = numberB.Except(numberA);
81 foreach (var item in Exceptnumber)
82 {
83 Console.WriteLine( " Except:{0} " , item);
84 }
85 Console.WriteLine();
86 }
87
88 // 使用分组运算符
89 static void LinqGroupBy()
90 {
91 string [] words = { " blueberry " , " chimpanzee " , " abacus " , " banana " , " apple " , " cheese " };
92 // 以字符中的第一个字母分组
93 var wordGroups = from w in words group w by w[ 0 ] into g select new { FirstLetter = g.Key, Words = g };
94 foreach (var item in wordGroups)
95 {
96 Console.WriteLine( " words that start with letter '{0}': " , item.FirstLetter);
97 foreach (var w in item.Words)
98 {
99 Console.WriteLine(w);
100 }
101 }
102
103 var wordgroup2 = words.GroupBy(a => a[ 0 ]);
104 foreach (var item in wordgroup2)
105 {
106 Console.WriteLine( " words that start with letter '{0}': " , item.Key);
107 foreach (var w in item)
108 {
109 Console.WriteLine(w);
110 }
111 }
112 }
113
114 // 元素运算符First,FirstOfDefault
115 static void LinqFirst()
116 {
117 int [] numbers = { 5 , 4 , 1 , 3 , 9 , 8 , 6 , 7 , 2 , 0 };
118 var number = (from n in numbers where n >= 6 select n).First();
119 Console.WriteLine( " First:{0} " , number);
120 // 查询第一个为2的倍数
121 int evenNum = numbers.First(n => n % 2 == 0 );
122 Console.WriteLine();
123 Console.WriteLine(evenNum);
124
125 int [] numbers2 = { };
126 int firstDefault = numbers2.FirstOrDefault();
127 Console.WriteLine( " firstDefault:{0} " , firstDefault);
128 }
129
130 // 限定运算符any,all,contains
131 static void LinqAny()
132 {
133 string [] words = { " blueberry " , " chimpanzee " , " abacus " , " banana " };
134 // 判断是否有字符包含'ba'元素
135 bool afterBa = words.Any(b => b.Contains( " ba " ));
136 Console.WriteLine(afterBa);
137
138 // 判断是否所有字符都包含'ba'元素
139 bool afterAll = words.All(b => b.Contains( " ba " ));
140 Console.WriteLine(afterAll);
141
142 }