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 对集合取平均值,计数,取最大值,最小值,总和


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 }