這一篇介紹了下面的內容:
詳細請參看代碼.
1 using System; 2 using System.Collections.Generic; 3 using System.ComponentModel; 4 using System.Data; 5 using System.Drawing; 6 using System.Linq; 7 using System.Text; 8 using System.Windows.Forms; 9 10 namespace WindowsFormsApplication1 11 { 12 public partial class Form1 : Form 13 { 14 public Form1() 15 { 16 InitializeComponent(); 17 } 18 19 private void Form1_Load(object sender, EventArgs e) 20 { 21 22 } 23 24 private void button1_Click(object sender, EventArgs e) 25 { 26 //查詢object數組 27 Object[] array = { "String", 12, true, 'a' }; 28 var types = array 29 .Select(s => s.GetType().Name) 30 .OrderBy(s => s); 31 ObjectDumper.Write(types); 32 } 33 34 private void button2_Click(object sender, EventArgs e) 35 { 36 //查詢強類型數組 37 Book[] books ={ 38 new Book{Title="Linq in Action"}, 39 new Book{Title="Linq for Fun"}, 40 new Book{Title="Extreme LINQ"} 41 }; 42 43 var titles = 44 books 45 .Where(s => s.Title.Contains("Action")) 46 .Select(s => s.Title); 47 48 ObjectDumper.Write(titles); 49 } 50 51 private void button3_Click(object sender, EventArgs e) 52 { 53 //查詢泛型字典 54 var dic = new Dictionary<int, string>(); 55 dic.Add(0, "zero"); 56 dic.Add(1, "un"); 57 dic.Add(2, "deux"); 58 dic.Add(3, "trois"); 59 dic.Add(4, "quatre"); 60 var list = 61 dic 62 .Where(s => s.Key % 2 == 0) 63 .Select(s => s.Value); 64 65 ObjectDumper.Write(list); 66 } 67 68 private void button4_Click(object sender, EventArgs e) 69 { 70 //查詢字符串, 字符串實現了IEnumerable<Char>接口 71 var count = "Non-letter characters in this string: 6" 72 .Where(s => !Char.IsLetter(s)) 73 .Count(); 74 75 ObjectDumper.Write(count); 76 } 77 78 private void button5_Click(object sender, EventArgs e) 79 { 80 string[] books ={"Funny Stories","All your base are belong to us", 81 "LINQ rules","C# on Rails","Bonjour mon Amour"}; 82 var query = 83 books 84 .Where(s => s.Length > 10) 85 .Select(s => new { Book = s.ToUpper() }); 86 87 var query1 = 88 from s in books 89 where s.Length > 10 90 orderby s 91 select new { Book = s.ToUpper() }; 92 93 dataGridView1.DataSource = query1.ToList(); 94 } 95 96 private void button6_Click(object sender, EventArgs e) 97 { 98 var query = 99 from s in SampleData.Books 100 where s.Title.Length > 5 101 orderby s.Title 102 select new { Book = s.Title, Price = s.Price }; 103 104 dataGridView2.DataSource = query.ToList(); 105 } 106 107 private void button7_Click(object sender, EventArgs e) 108 { 109 //SelectMany 110 111 var query1 = 112 SampleData.Books 113 .SelectMany(s => s.Authors); 114 ObjectDumper.Write(query1); 115 116 var query = 117 from book in SampleData.Books 118 from author in book.Authors 119 select author.FirstName + author.LastName; 120 121 ObjectDumper.Write(query); 122 } 123 124 private void button8_Click(object sender, EventArgs e) 125 { 126 var book = 127 SampleData.Books 128 .Select((s, no) => new { no, s.Title }) 129 .OrderBy(s => s.Title); 130 131 //無法翻譯為等同的查詢表達式語法 132 133 ObjectDumper.Write(book); 134 135 } 136 137 private void button9_Click(object sender, EventArgs e) 138 { 139 //Distinct操作符 140 var query = 141 SampleData.Books 142 .SelectMany(s => s.Authors) 143 .Select(s => s.FirstName + s.LastName); 144 ObjectDumper.Write(query); 145 146 //去除重復的author,C#沒有和distinct等同的查詢表達式 147 var query1 = 148 SampleData.Books 149 .SelectMany(s => s.Authors) 150 .Distinct() 151 .Select(s => s.FirstName + s.LastName); 152 Console.WriteLine(); 153 ObjectDumper.Write(query1); 154 155 } 156 157 private void button10_Click(object sender, EventArgs e) 158 { 159 //排序 160 var query = 161 from s in SampleData.Books 162 orderby s.Publisher.Name, s.Price descending, s.Title 163 select new 164 { 165 Publisher=s.Publisher.Name, 166 s.Price, 167 s.Title 168 }; 169 dataGridView1.DataSource = query.ToList(); 170 ObjectDumper.Write(query); 171 172 var query1 = 173 SampleData.Books 174 .OrderBy(s => s.Publisher.Name) 175 .ThenByDescending(s => s.Price) 176 .ThenBy(s => s.Title) 177 .Select(s => new 178 { 179 publisher = s.Publisher.Name, 180 s.Price, 181 s.Title 182 }); 183 Console.WriteLine(); 184 ObjectDumper.Write(query1); 185 186 } 187 188 private void button11_Click(object sender, EventArgs e) 189 { 190 //嵌套查詢 191 192 var query = 193 from s in SampleData.Publishers 194 select new 195 { 196 item1 = s.Name, 197 item2 = 198 from book in SampleData.Books 199 where book.Publisher.Name == s.Name 200 select book 201 }; 202 203 foreach (var m in query) 204 { 205 Console.WriteLine(m.item1+":"); 206 foreach (var k in m.item2) 207 { 208 Console.WriteLine(k.Title); 209 } 210 Console.WriteLine(); 211 } 212 213 214 } 215 216 private void button12_Click(object sender, EventArgs e) 217 { 218 //分組 219 //代碼讓圖書按出版社分組.屬於同一出版社的圖書將被分到相同的組中. 220 //在這個查詢中,該分組publisherBooks對象是IGrouping<TKey,T>接口. 221 //其中T為集合IEnumerable<Book> 222 223 var query = 224 from s in SampleData.Books 225 group s by s.Publisher into publisherBooks 226 select new 227 { 228 publisher=publisherBooks.Key.Name, 229 books=publisherBooks, 230 booksum=publisherBooks.Count() 231 }; 232 foreach (var m in query) 233 { 234 Console.WriteLine(m.publisher + ":"); 235 foreach (var k in m.books) 236 { 237 Console.WriteLine(k.Title); 238 } 239 Console.WriteLine(m.booksum); 240 Console.WriteLine(); 241 } 242 243 } 244 245 private void button13_Click(object sender, EventArgs e) 246 { 247 //組連接 248 var query = 249 from s in SampleData.Publishers 250 join book in SampleData.Books 251 on s equals book.Publisher into publisherBooks 252 select new 253 { 254 publisher=s.Name, 255 books=publisherBooks 256 }; 257 258 foreach (var m in query) 259 { 260 Console.WriteLine(m.publisher + ":"); 261 foreach (var k in m.books) 262 { 263 Console.WriteLine(k.Title); 264 } 265 Console.WriteLine(); 266 } 267 268 } 269 270 private void button14_Click(object sender, EventArgs e) 271 { 272 //內連接,旨在找到兩個序列的交集 273 //和組連接的差別是,沒有使用into關鍵字將元素分組,而是將圖書投影在了出版社對象上 274 //注意沒有任何書籍的出版社沒有顯示出來,這是因為在兩個待連接序列中均符合條件的組合才會出現在結果序列中. 275 var query = 276 from s in SampleData.Publishers 277 join book in SampleData.Books on s equals book.Publisher 278 select new 279 { 280 publisher=s.Name, 281 books=book.Title 282 }; 283 284 var query2= 285 SampleData.Publishers 286 .Join(SampleData.Books, //內部序列 287 s=>s, //外部的key選擇器 288 book=>book.Publisher, //內部的key選擇器 289 (s,book)=>new //結果選擇器 290 { 291 publisher=s.Name, 292 books=book.Title 293 }); 294 295 ObjectDumper.Write(query2); 296 297 foreach (var m in query) 298 { 299 Console.WriteLine(m.publisher + ":"); 300 Console.WriteLine(m.books); 301 Console.WriteLine(); 302 } 303 304 } 305 306 private void button15_Click(object sender, EventArgs e) 307 { 308 //左外連接 309 var query = 310 from s in SampleData.Publishers 311 join book in SampleData.Books 312 on s equals book.Publisher into publisherBooks 313 from book in publisherBooks.DefaultIfEmpty() //為空序列提供默認元素 314 select new 315 { 316 publisher=s.Name, 317 books=book==default(Book)?"(no books)":book.Title 318 }; 319 320 ObjectDumper.Write(query); 321 } 322 323 private void button16_Click(object sender, EventArgs e) 324 { 325 //交叉連接, 計算出兩個序列中所有元素的積 326 //結果序列由一個序列的每個元素和另一個序列中每個元素的完全組合構成 327 var query = 328 from s in SampleData.Publishers 329 from book in SampleData.Books 330 select new 331 { 332 correct=(s==book.Publisher), 333 publisher=s.Name, 334 books=book.Title 335 }; 336 ObjectDumper.Write(query); 337 } 338 339 private void button17_Click(object sender, EventArgs e) 340 { 341 //skip,take 342 var list1 = new List<string>(); 343 for (int i = 0; i < 100; i++) 344 list1.Add(i.ToString()); 345 346 var query = 347 list1 348 .Select(s=>s) 349 .Skip(90).Take(10); 350 351 352 ObjectDumper.Write(query); 353 } 354 355 356 357 358 359 } 360 361 362 }
本節源代碼下載
原創文章,出自"博客園, 豬悟能'S博客" : http://www.cnblogs.com/hackpig/