LINQ的使用
数据初始化和LINE基础使用
武林高手类
namespace _033_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 Kungfu { get; set; }
public int Level { get; set; }
}
}
Main方法
class Program
{
static void Main(string[] args)
{
var masterList = new List<MartialArtsMaster>()//初始化武林高手
{
//创建新对象,在初始化的时候赋值,用","隔开
new MartialArtsMaster(){Id=1,Name="黄蓉",Age=18,MenPai="丐帮",Kungfu="打狗棒法",Level=8} ,
new MartialArtsMaster(){Id=2,Name="任我行",Age=50,MenPai="明教",Kungfu="葵花宝典",Level=9},
new MartialArtsMaster(){Id=2,Name="令狐冲",Age=23,MenPai="华山",Kungfu="孤独九剑",Level=10}
};
//使用LINQ做查询(表达式写法)
//from后面设置查询的集合
var res1 = from m in masterList
//where后面跟上查询的条件,通过&&添加并列的条件
where m.Level > 8 &&m.MenPai=="明教"
//表示m的集合返回 (LINQ集合的返回值类型),m.Name就是返回string类型
select m;
foreach (var temp in res1)
{
Console.WriteLine(temp.Name);
}
Console.ReadKey();
}
}
LINQ的拓展方法
class Program
{
static void Main(string[] args)
{
//初始化武林高手.......
//LINQ的拓展方法
//遍历每一个元素,然后调用( )方法,根据条件进行过滤
var res2 = masterList.Where(Test1);
//使用Lamda表达式进行输写
var res3 = masterList.Where(m => m.Age < 25 &&m.MenPai=="华山");
foreach (var temp in res2)
{
Console.WriteLine(temp.Name);
}
Console.ReadKey();
}
//过滤方法
static bool Test1(MartialArtsMaster master)
{
if (master.Age < 25) return true;
return false;
}
}
LINQ联合查询
添加Kungfu类
class Kungfu
{
public int KungfuId { get; set; }
public string KungfuName { get; set; }
public int KungfuPower { get; set; }
}
Main方法
class Program
{
static void Main(string[] args)
{
//初始化武林高手....
//初始化功夫
var kungfuList = new List<Kungfu>
{
new Kungfu(){ KungfuId=1,KungfuName="打狗棒法",KungfuPower=100},
new Kungfu(){ KungfuId=2,KungfuName="葵花宝典",KungfuPower=90},
new Kungfu(){ KungfuId=3,KungfuName="孤独九剑",KungfuPower=80}
};
//LINQ联合查询
//每一条m对应着k里所有的集合,也就是m*k个数据
var res4 = from m in masterList
from k in kungfuList
//根据条件,筛选两个集合相匹配的对象出来
where m.Kungfu == k.KungfuName && k.KungfuPower > 80
select new { master = m, kungfu = k }; //创建临时对象
//拓展方法-使用委托进行联合查询
//m=>kungfuList表示两个List进行联合,(m,k)组拼结果,之后创建一个新的集合
//var res5 = masterList.SelectMany(m => kungfuList, (m, k) => new { master = m, kungfu = k });
var res5 = masterList.SelectMany(m => kungfuList, (m, k) => new { master = m, kungfu = k })
//添加条件
.Where(x => x.master.Kungfu == x.kungfu.KungfuName && x.kungfu.KungfuPower > 80);
foreach (var temp in res4)
{
Console.WriteLine(temp.master.Name);
}
Console.ReadKey();
}
}
LINQ排序
class Program
{
static void Main(string[] args)
{
//初始化武林高手....
//对查询结果进行排序
var res6 = from m in masterList
where m.Level > 7
//根据条件从小到大排序,用“,”进行多个条件排序(第一个条件相同的情况下)
orderby m.Age,m.Level
//orderby m.Age descending //倒序
select m;
//拓展方法 ThenBy (在第一个条件下再进行排序)
//m=>排序条件
var res7 = masterList.Where(m => m.Level >8)
.OrderBy(m => m.Age).ThenBy(m => m.Id);
}
}
join on集合联合
{
......
//on后面跟连接条件,equals表示两个字段相等
var res8 = from m in masterList
join k in kungfuList on m.Kungfu equals k.KungfuName
select new { master = m, kungfu = k };
}
分组查询
{
//into groups(按照相同的类型进行分组)
var res9 = from k in kungfuList
join m in masterList on k.KungfuName equals m.Name
into groups
orderby groups.Count() //按照组内数量进行排序
select new { kungfu = k, count = groups.Count() };
//按照自身字段分组group
//by+分组条件 ,into+组(放到哪个组里)
var res10 = from m in masterList
group m by m.MenPai into g
//g.Key获取分组的条件
select new { count = g.Count(), key = g.Key};
}
量词操作符Any All
{
//量词操作符 any all判断集合中是否满足某个条件
//any只要有一个对象满足条件就返回true,all得全部满足
var res11 = masterList.Any(m => m.MenPai == "丐帮");
var res12 = masterList.All(m => m.MenPai == "丐帮");
Console.WriteLine(res11);
Console.WriteLine(res12);
}