LINQ管理查询和Lambda表达式管理查询
- 新建两个类
internal class MartialArtMaster { public int ID { get; set; } public string Name { get; set; } public int Age { get; set; } public string Menpai { get; set; } public string Kongfu { get; set; } public int Level { get; set; } public override string ToString() { return $"ID:{ID},Name:{Name},Age:{Age},Menpai:{Menpai},Kongfu:{Kongfu},Level:{Level}"; } }
internal class KongFu { public int ID { get; set; } public string? Name { get; set; } public int Power { get; set; } public override string ToString() { return $"ID:{ID},name:{Name},power:{Power}"; } }
- 然后去控制台程序中编写语句:
-
static void Main(string[] args) { List<MartialArtMaster> martialArts = new List<MartialArtMaster>() { new MartialArtMaster(){ID=1, Name="郭靖", Age=30, Kongfu="降龙十八掌", Menpai="丐帮",Level=10 }, new MartialArtMaster(){ID=2, Name="黄蓉", Age=30, Kongfu="打狗棒法", Menpai="丐帮",Level=9 }, new MartialArtMaster(){ID=3, Name="洪七公", Age=30, Kongfu="打狗棒法", Menpai="丐帮",Level=10 }, new MartialArtMaster(){ID=4, Name="任我行", Age=30, Kongfu="葵花宝典", Menpai="明教",Level=1 }, new MartialArtMaster(){ID=5, Name="东方不败", Age=30, Kongfu="葵花宝典", Menpai="明教",Level=10 }, new MartialArtMaster(){ID=6, Name="岳不群", Age=30, Kongfu="葵花宝典", Menpai="华山",Level=7 }, new MartialArtMaster(){ID=7, Name="令狐冲", Age=30, Kongfu="独孤九剑", Menpai="华山",Level=10 }, new MartialArtMaster(){ID=8, Name="黄药师", Age=30, Kongfu="弹指神通", Menpai="桃花岛",Level=10 }, new MartialArtMaster(){ID=9, Name="风清扬", Age=30, Kongfu="独孤九剑", Menpai="华山",Level=10 } }; List<KongFu> kongFu = new List<KongFu>() { new KongFu(){ ID=1, Name="降龙十八掌", Power=99}, new KongFu(){ ID=2, Name="弹指神通", Power=80}, new KongFu(){ ID=3, Name="打狗棒法", Power=90}, new KongFu(){ ID=4, Name="葵花宝典", Power=95}, new KongFu(){ ID=5, Name="独孤九剑", Power=70} }; Console.WriteLine("----------------------1.分割线(LINQ关联查询)------------------------"); //LINQ关联查询 var linqres = from m in martialArts from k in kongFu where m.Kongfu == k.Name && k.Power>90 select new { martialArt = m, kongfu = k }; foreach (var item in linqres) { Console.WriteLine(item); } Console.WriteLine("----------------------2.分割线(Lambda表达式查询)------------------------"); //Lambda表达式查询 var res= martialArts.SelectMany(t => kongFu, (t, k) => new { martialArt = t, kongfu = k }) .Where(x=>x.martialArt.Kongfu==x.kongfu.Name && x.kongfu.Power > 90); foreach (var item in res) { Console.WriteLine(item); } Console.WriteLine("----------------------.分割线(LINQ join on集合联合)------------------------"); //LINQ join on集合联合 var linqJoin=from m in martialArts join k in kongFu on m.Kongfu equals k.Name where k.Power>90 select new { martialArt = m, kongfu = k }; foreach (var item in linqJoin) { Console.WriteLine(item); } }
- 查看结果: