MartialArtsMaster.cs
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace _018_LINQ
{
//武林高手
class MartialArtsMaster
{
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 string.Format("Id:{0},Name:{1},Age:{2},Menpai:{3},Kongfu:{4},Level:{5}", Id, Name, Age, Kongfu, Level);
}
}
}
Kongfu.cs
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace _018_LINQ
{
class Kongfu
{
public int KongfuId { get; set; }
public string KongfuName { get; set; }
public int Lethality { get; set; }
}
}
Program.cs
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace _018_LINQ
{
class Program
{
static void Main(string[] args)
{
//初始化武林高手
var masterList = new List<MartialArtsMaster>(){
new MartialArtsMaster(){ Id = 1, Name = "黄蓉", Age = 18, Menpai = "丐帮", Kongfu = "打狗棒法", Level = 9 },
new MartialArtsMaster(){ Id = 2, Name = "洪七公", Age = 70, Menpai = "丐帮", Kongfu = "打狗棒法", Level = 10 },
new MartialArtsMaster(){ Id = 3, Name = "郭靖", Age = 22, Menpai = "丐帮", Kongfu = "降龙十八掌",Level = 10 },
new MartialArtsMaster(){ Id = 4, Name = "任我行", Age = 50, Menpai = "明教", Kongfu = "葵花宝典", Level = 1 },
new MartialArtsMaster(){ Id = 5, Name = "东方不败",Age = 35, Menpai = "明教", Kongfu = "葵花宝典", Level = 10 },
new MartialArtsMaster(){ Id = 6, Name = "林平之", Age = 23, Menpai = "华山", Kongfu = "葵花宝典", Level = 7 },
new MartialArtsMaster(){ Id = 7, Name = "岳不群", Age = 50, Menpai = "华山", Kongfu = "葵花宝典", Level = 8 },
new MartialArtsMaster(){ Id = 8, Name = "令狐冲", Age = 23, Menpai = "华山", Kongfu = "独孤九剑", Level = 10 },
new MartialArtsMaster(){ Id = 9, Name = "梅超风", Age = 23, Menpai = "桃花岛", Kongfu = "九阴真经", Level = 8 },
new MartialArtsMaster(){ Id =10, Name = "黄药师", Age = 23, Menpai = "梅花岛", Kongfu = "弹指神通", Level = 10 },
new MartialArtsMaster(){ Id = 11, Name = "风清扬", Age = 23, Menpai = "华山", Kongfu = "独孤九剑", Level = 10 }
};
//初始化武学
var kongfuList = new List<Kongfu>(){
new Kongfu(){KongfuId=1, KongfuName="打狗棒法", Lethality=90},
new Kongfu(){KongfuId=2, KongfuName="降龙十八掌", Lethality=95},
new Kongfu(){KongfuId=3, KongfuName="葵花宝典", Lethality=100},
new Kongfu(){ KongfuId= 4, KongfuName = "独孤九剑", Lethality = 100 },
new Kongfu(){ KongfuId = 5, KongfuName = "九阴真经", Lethality = 100 },
new Kongfu(){ KongfuId = 6, KongfuName = "弹指神通", Lethality = 100 }
};
//查询所有武学级别大于8的武林高手
//var res = new List<MartialArtsMaster>();
//foreach(var temp in masterList)
//{
// if (temp.Level > 8)
// {
// res.Add(temp);
// }
//}
//使用LINQ做查询
var res = from m in masterList//from后面设置查询的集合
where m.Level > 8 //where后面跟上查询的条件
select m.Name; //表示m的结果结合返回
foreach(var temp in res)
{
Console.WriteLine(temp);
}
Console.ReadKey();
}
}
}
LINQ语句还有扩展写法:
var res = masterList.Where(m=>m.Level>8 && m.Menpai == "丐帮");
联合查询:通过两个表的共有属性进行查询
//3.LINQ联合查询
var res = from m in masterList
from k in kongfuList
where m.Kongfu == k.KongfuName && k.Lethality > 90
//select new { master = m, kongfu = k };
select m;//取得所学功夫大于90的武林高手
这个也能使用扩展语句:
var res = masterList.SelectMany(m => kongfuList, (m, k) => new { master = m, kongfu = k })
.Where(x=>x.master.Kongfu == x.kongfu.KongfuName && x.kongfu.Lethality>90);
排序:
//var res = from m in masterList//from后面设置查询的集合
// where m.Level > 8 && m.Menpai == "丐帮" //where后面跟上查询的条件
// //orderby m.Age descending //按照年龄降序排序
// orderby m.Level,m.Age //按照多个字段进行排序,如果字段的属性相同,就按照第二个属性排序
// select m; //表示m的结果结合返回
//var res = masterList.Where(m => m.Level > 8 && m.Menpai == "丐帮").OrderBy(m => m.Age);
//var res = masterList.Where(m => m.Level > 8 && m.Menpai == "丐帮").OrderBy(m => m.Level).ThenBy(m=>m.Age);
join on联合查询
//5.join on 集合联合
var res = from m in masterList
join k in kongfuList on m.Kongfu equals k.KongfuName
where k.Lethality > 90
select new { master = m, kongfu = k};
分组查询的方法
//6.分组查询 into groups(把武林高手按照所学功夫分类,看一哪个功夫修炼的人最多)
//var res = from k in kongfuList
// join m in masterList on k.KongfuName equals m.Kongfu
// into groups
// orderby groups.Count()
// select new { kongfu = k, count = groups.Count() };
//7.按照自身字段分组 group
var res = from m in masterList
group m by m.Menpai into g
select new { count = g.Count(), key = g.Key };//g.Key Key表示是按照哪个属性分的组
量词操作符
//8.量词操作符,any all判断集合中是否满足某个条件
//bool res = masterList.Any(m => m.Menpai == "丐帮"); //一个满足即可
//Console.WriteLine(res);
bool res = masterList.All(m => m.Menpai == "丐帮");//判断所有是否满足
Console.WriteLine(res);