1 using System; 2 using System.Collections.Generic; 3 using System.Linq; 4 using System.Text; 5 using System.Threading; 6 using System.Threading.Tasks; 7 8 namespace MyLinq 9 { 10 /// <summary> 11 /// Linq To Object 12 /// .NetFramework3.0的一个非常重大的改变 13 /// </summary> 14 public class LinqShow 15 { 16 #region Data Init 17 private List<Student> GetStudentList() 18 { 19 #region 初始化数据 20 List<Student> studentList = new List<Student>() 21 { 22 new Student() 23 { 24 Id=1, 25 Name="赵亮", 26 ClassId=2, 27 Age=35 28 }, 29 new Student() 30 { 31 Id=1, 32 Name="再努力一点", 33 ClassId=2, 34 Age=23 35 }, 36 new Student() 37 { 38 Id=1, 39 Name="王炸", 40 ClassId=2, 41 Age=27 42 }, 43 new Student() 44 { 45 Id=1, 46 Name="疯子科学家", 47 ClassId=2, 48 Age=26 49 }, 50 new Student() 51 { 52 Id=1, 53 Name="灭", 54 ClassId=2, 55 Age=25 56 }, 57 new Student() 58 { 59 Id=1, 60 Name="黑骑士", 61 ClassId=2, 62 Age=24 63 }, 64 new Student() 65 { 66 Id=1, 67 Name="故乡的风", 68 ClassId=2, 69 Age=21 70 }, 71 new Student() 72 { 73 Id=1, 74 Name="晴天", 75 ClassId=2, 76 Age=22 77 }, 78 new Student() 79 { 80 Id=1, 81 Name="旭光", 82 ClassId=2, 83 Age=34 84 }, 85 new Student() 86 { 87 Id=1, 88 Name="oldkwok", 89 ClassId=2, 90 Age=30 91 }, 92 new Student() 93 { 94 Id=1, 95 Name="乐儿", 96 ClassId=2, 97 Age=30 98 }, 99 new Student() 100 { 101 Id=1, 102 Name="暴风轻语", 103 ClassId=2, 104 Age=30 105 }, 106 new Student() 107 { 108 Id=1, 109 Name="一个人的孤单", 110 ClassId=2, 111 Age=28 112 }, 113 new Student() 114 { 115 Id=1, 116 Name="小张", 117 ClassId=2, 118 Age=30 119 }, 120 new Student() 121 { 122 Id=3, 123 Name="阿亮", 124 ClassId=3, 125 Age=30 126 }, 127 new Student() 128 { 129 Id=4, 130 Name="37度", 131 ClassId=4, 132 Age=30 133 } 134 , 135 new Student() 136 { 137 Id=4, 138 Name="关耳", 139 ClassId=4, 140 Age=30 141 } 142 , 143 new Student() 144 { 145 Id=4, 146 Name="耳机侠", 147 ClassId=4, 148 Age=30 149 }, 150 new Student() 151 { 152 Id=4, 153 Name="Wheat", 154 ClassId=4, 155 Age=30 156 }, 157 new Student() 158 { 159 Id=4, 160 Name="Heaven", 161 ClassId=4, 162 Age=22 163 }, 164 new Student() 165 { 166 Id=4, 167 Name="等待你的微笑", 168 ClassId=4, 169 Age=23 170 }, 171 new Student() 172 { 173 Id=4, 174 Name="畅", 175 ClassId=4, 176 Age=25 177 }, 178 new Student() 179 { 180 Id=4, 181 Name="混无痕", 182 ClassId=4, 183 Age=26 184 }, 185 new Student() 186 { 187 Id=4, 188 Name="37度", 189 ClassId=4, 190 Age=28 191 }, 192 new Student() 193 { 194 Id=4, 195 Name="新的世界", 196 ClassId=4, 197 Age=30 198 }, 199 new Student() 200 { 201 Id=4, 202 Name="Rui", 203 ClassId=4, 204 Age=30 205 }, 206 new Student() 207 { 208 Id=4, 209 Name="帆", 210 ClassId=4, 211 Age=30 212 }, 213 new Student() 214 { 215 Id=4, 216 Name="肩膀", 217 ClassId=4, 218 Age=30 219 }, 220 new Student() 221 { 222 Id=4, 223 Name="孤独的根号三", 224 ClassId=4, 225 Age=30 226 } 227 }; 228 #endregion 229 return studentList; 230 } 231 #endregion 232 233 public void Show() 234 { 235 List<Student> studentList = this.GetStudentList(); 236 //常规情况下数据过滤 237 //{ 238 // //年纪小于30 239 // var list = new List<Student>(); 240 // foreach (var item in studentList) 241 // { 242 // if (item.Age < 30) 243 // { 244 // list.Add(item); 245 // } 246 // } 247 // { 248 // Console.WriteLine("*****************************************"); 249 // var result = studentList.ElevenWhere<Student>(s => s.Age < 30); 250 // foreach (var item in result) 251 // { 252 // Console.WriteLine(item.Name); 253 // } 254 // } 255 // { 256 // Console.WriteLine("*****************************************"); 257 // var result = studentList.ElevenWhereIterator<Student>(s => s.Age < 30); 258 // foreach (var item in result) 259 // { 260 // Console.WriteLine(item.Name); 261 // } 262 // } 263 264 //} 265 266 //{ 267 // //Name长度大于2的 268 // var list = new List<Student>(); 269 // foreach (var item in studentList) 270 // { 271 // if (item.Name.Length > 2) 272 // { 273 // list.Add(item); 274 // } 275 // } 276 277 // //var result = ExtendMethod.ElevenWhere(studentList, s => s.Name.Length > 2); 278 // var result = studentList.ElevenWhere(s => s.Name.Length > 2); 279 //} 280 281 //{ 282 // //N个条件叠加 283 // var list = new List<Student>(); 284 // foreach (var item in studentList) 285 // { 286 // if (item.Id > 1 287 // && item.Name != null 288 // && item.ClassId == 1 289 // && item.Age > 20) 290 // { 291 // list.Add(item); 292 // } 293 // } 294 // var result = studentList.ElevenWhere(item => item.Id > 1 295 // && item.Name != null 296 // && item.ClassId == 1 297 // && item.Age > 20); 298 //} 299 300 //{ 301 // new List<int>() { 12423434, 45, 53, 45, 43, 534, 534, 543, 5, 435, 45, 45, } 302 // .ElevenWhere(i => i > 10); 303 //} 304 305 #region Linq 扩展方法&表达式 306 { 307 var list = studentList.Where<Student>(s => s.Age < 30);//陈述句 言出法随 封装的好 308 foreach (var item in list) 309 { 310 Console.WriteLine("Name={0} Age={1}", item.Name, item.Age); 311 } 312 } 313 { 314 Console.WriteLine("********************"); 315 var list = from s in studentList 316 where s.Age < 30 317 select s; 318 319 foreach (var item in list) 320 { 321 Console.WriteLine("Name={0} Age={1}", item.Name, item.Age); 322 } 323 } 324 #endregion 325 326 #region linq to object Show 327 { 328 //这里有一堆学生 每个学生都转换成别的对象 329 330 Console.WriteLine("**********投影**********"); 331 var list = studentList.Where<Student>(s => s.Age < 30) 332 .Select(s => new 333 { 334 IdName = s.Id + s.Name, 335 ClassName = s.ClassId == 2 ? "高级班" : "其他班" 336 }); 337 foreach (var item in list) 338 { 339 Console.WriteLine("Name={0} Age={1}", item.ClassName, item.IdName); 340 } 341 } 342 { 343 Console.WriteLine("********************"); 344 var list = from s in studentList 345 where s.Age < 30 346 select new 347 { 348 IdName = s.Id + s.Name, 349 ClassName = s.ClassId == 2 ? "高级班" : "其他班" 350 }; 351 352 foreach (var item in list) 353 { 354 Console.WriteLine("Name={0} Age={1}", item.ClassName, item.IdName); 355 } 356 } 357 { 358 //IN查询 359 var list = studentList.Where<Student>(s => s.Age < 30) 360 .Where(s => new int[] { 1, 2, 3, 4 }.Contains(s.ClassId)) 361 .Select(s => new 362 { 363 IdName = s.Id + s.Name, 364 ClassName = s.ClassId == 2 ? "高级班" : "其他班" 365 }); 366 } 367 368 { 369 Console.WriteLine("********************"); 370 var list = studentList.Where<Student>(s => s.Age < 30)//条件过滤 371 .Select(s => new//投影 372 { 373 Id = s.Id, 374 ClassId = s.ClassId, 375 IdName = s.Id + s.Name, 376 ClassName = s.ClassId == 2 ? "高级班" : "其他班" 377 }) 378 .OrderBy(s => s.Id)//排序 379 //.ThenBy//2个都生效 380 .OrderByDescending(s => s.ClassId)//倒排 最后一个生效 381 .Skip(2)//跳过几条 382 .Take(3)//获取几条 383 ; 384 foreach (var item in list) 385 { 386 Console.WriteLine($"Name={item.ClassName} Age={item.IdName}"); 387 } 388 } 389 { 390 var list = from s in studentList 391 where s.Age < 30 392 group s by s.ClassId into sg 393 select sg; 394 foreach (var data in list) 395 { 396 Console.WriteLine(data.Key); 397 foreach (var item in data) 398 { 399 Console.WriteLine($"{item.Id} {item.Name} {item.Age}"); 400 } 401 } 402 } 403 {//group by 404 Console.WriteLine("********************"); 405 var list = from s in studentList 406 where s.Age < 30 407 group s by s.ClassId into sg 408 select new 409 { 410 key = sg.Key, 411 maxAge = sg.Max(t => t.Age) 412 }; 413 foreach (var item in list) 414 { 415 Console.WriteLine($"key={item.key} maxAge={item.maxAge}"); 416 } 417 //group by new {s.ClassId,s.Age} 418 //group by new {A=s.ClassId>1} 419 } 420 { 421 //var list = studentList.GroupBy(s => new { s.ClassId, s.Age }).Select(sg => new 422 //{ 423 // key = sg.Key, 424 // maxAge = sg.Max(t => t.Age) 425 //}); 426 //foreach (var item in list) 427 //{ 428 // item.ke 429 //} 430 } 431 { 432 Console.WriteLine("********************"); 433 var list = studentList.GroupBy(s => s.ClassId).Select(sg => new 434 { 435 key = sg.Key, 436 maxAge = sg.Max(t => t.Age) 437 }); 438 foreach (var item in list) 439 { 440 Console.WriteLine($"key={item.key} maxAge={item.maxAge}"); 441 } 442 } 443 List<Class> classList = new List<Class>() 444 { 445 new Class() 446 { 447 Id=1, 448 ClassName="初级班" 449 }, 450 new Class() 451 { 452 Id=2, 453 ClassName="高级班" 454 }, 455 new Class() 456 { 457 Id=3, 458 ClassName="微信小程序" 459 }, 460 }; 461 { 462 var list = from s in studentList 463 join c in classList on s.ClassId equals c.Id//不能用==只能equals 464 select new 465 { 466 Name = s.Name, 467 CalssName = c.ClassName 468 }; 469 foreach (var item in list) 470 { 471 Console.WriteLine($"Name={item.Name},CalssName={item.CalssName}"); 472 } 473 } 474 { 475 var list = studentList.Join(classList, s => s.ClassId, c => c.Id, (s, c) => new 476 { 477 Name = s.Name, 478 CalssName = c.ClassName 479 }); 480 foreach (var item in list) 481 { 482 Console.WriteLine($"Name={item.Name},CalssName={item.CalssName}"); 483 } 484 } 485 {//左连接 486 var list = from s in studentList 487 join c in classList on s.ClassId equals c.Id 488 into scList 489 from sc in scList.DefaultIfEmpty()// 490 select new 491 { 492 Name = s.Name, 493 CalssName = sc == null ? "无班级" : sc.ClassName//c变sc,为空则用 494 }; 495 foreach (var item in list) 496 { 497 Console.WriteLine($"Name={item.Name},CalssName={item.CalssName}"); 498 } 499 Console.WriteLine(list.Count()); 500 } 501 { 502 var list = studentList.Join(classList, s => s.ClassId, c => c.Id, (s, c) => new 503 { 504 Name = s.Name, 505 CalssName = c.ClassName 506 }).DefaultIfEmpty();//为空就没有了 507 foreach (var item in list) 508 { 509 Console.WriteLine($"Name={item.Name},CalssName={item.CalssName}"); 510 } 511 Console.WriteLine(list.Count()); 512 } 513 { 514 //Min Max Sum 515 } 516 #endregion 517 518 { 519 //linq to sql 520 IQueryable<Student> list = studentList.AsQueryable(); 521 list.Where<Student>(s => s.Age > 30);//操作数据库 522 //list.Where<Student>(s => 523 //{ 524 // Console.WriteLine("12354"); 525 // return s.Age > 30; 526 //}); 527 } 528 { 529 studentList.Where<Student>(s => 530 { 531 Console.WriteLine("12354"); 532 return s.Age > 30; 533 } 534 ); 535 } 536 } 537 538 } 539 }
原文:https://www.cnblogs.com/YZM97/p/14245138.html