C# LINQ学习

4 篇文章 0 订阅

LINQ

感觉实质和SQL语法相同

基本数据:(数据瞎写的!!!

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 = 7},
	new MartialArtsMaster(){Id = 3,Name = "任我行",Age = 23,Menpai = "丐帮",Kongfu = "葵花宝典",Level = 5},
	new MartialArtsMaster(){Id = 4,Name = "东方不败",Age = 45,Menpai = "明教",Kongfu = "打狗棍法",Level = 10},
	new MartialArtsMaster(){Id = 5,Name = "林平之",Age = 18,Menpai = "明教",Kongfu = "无痕剑意",Level = 10},
	new MartialArtsMaster(){Id = 6,Name = "岳不群",Age = 65,Menpai = "明教",Kongfu = "九阴真经",Level = 9},
	new MartialArtsMaster(){Id = 7,Name = "令狐冲",Age = 65,Menpai = "华山",Kongfu = "独孤九剑",Level = 8},
	new MartialArtsMaster(){Id = 8,Name = "梅超风",Age = 23,Menpai = "华山",Kongfu = "弹指神功",Level = 6},
	new MartialArtsMaster(){Id = 9,Name = "郭靖",Age = 45,Menpai = "桃花岛",Kongfu = "降龙十八掌",Level = 7},
	new MartialArtsMaster(){Id = 10,Name = "黄药师",Age = 77,Menpai = "桃花岛",Kongfu = "打狗棍法",Level = 9},
};

var kongfu = new List<Kongfu>()
{
	new Kongfu(){Id = 1,Name = "打狗棍法",Power = 90},
	new Kongfu(){Id = 2,Name = "葵花宝典",Power = 96},
	new Kongfu(){Id = 3,Name = "无痕剑意",Power = 100},
	new Kongfu(){Id = 4,Name = "九阴真经",Power = 90},
	new Kongfu(){Id = 5,Name = "独孤九剑",Power = 95},
	new Kongfu(){Id = 6,Name = "弹指神功",Power = 85},
	new Kongfu(){Id = 7,Name = "降龙十八掌",Power = 100},
};

单条件查询

LINQ表达式写法

查询所有武学级别大于8的宗师

var res = from m in masterList
	where m.Level > 8
	select m;
扩展方法写法

查询所有武学级别大于8的宗师

// 刚刚有点懵 前面的Func有点忘了 摸出来的,new 委托类型(方法)
var res = masterList.Where(new Func<MartialArtsMaster, bool>((master => master.Level > 8)));

// 直接Lambda表达式
var res = masterList.Where(r => r.Level > 8)

多条件查询

LINQ表达式写法

查询所有武学级别大于8,门派是丐帮的宗师

var res = from m in masterList
	where m.Level > 8 && m.Menpai=="丐帮"
	select m;
扩展方法写法

查询所有武学级别大于8,门派是丐帮的宗师

var res = masterList.Where(new Func<MartialArtsMaster, bool>((master => master.Level > 8 && master.Menpai=="丐帮")));

// 直接Lambda表达式
var res = masterList.Where(r => r.Level > 8 && master.Menpai=="丐帮")

多表查询

LINQ表达式写法
var res = from m in masterList
	from k in kongfu
	select new {master = m,kongfu = k};

会把两个集合的对象一一对应组和

组合

添加联合条件:

var res = from m in masterList
                from k in kongfu
                      where m.Kongfu == k.Name
                select new {master = m,kongfu = k};

image-20200722220924570

查询所学武学杀伤力大于90的宗师

var res = from m in masterList
                from k in kongfu
                      where m.Kongfu == k.Name && k.Power>90
                select new {master = m,kongfu = k};
扩展方法写法

把两个集合的对象一一对应组和

var res = masterList.SelectMany(k=>kongfuList,(m,k)=>new {master=m,kongfu=k});

添加限制条件,相当于指定外键(修炼功夫的名字)

var res = masterList.SelectMany(k => kongfuList, (m, k) => new {master = m, kongfu = k}).Where(x 	=>x.master.Kongfu == x.kongfu.Name);

查询所学武学杀伤力大于90的宗师

var res = masterList.SelectMany(k => kongfuList, (m, k) => new {master = m, kongfu = k}).Where(x 	=>x.master.Kongfu == x.kongfu.Name && x.kongfu.Power> 90);

image-20200723094449782

排序

LINQ表达式写法

根据年龄排序,规则同SQL

// 正序
var res = from m in masterList
	where m.Level > 6 && m.Menpai == "丐帮"
	orderby m.Age
	select m;

// 倒序
var res = from m in masterList
	where m.Level > 6 && m.Menpai == "丐帮"
	orderby m.Age descending
	select m;

// 多个排序
var res = from m in masterList
	where m.Level > 6 && m.Menpai == "丐帮"
	orderby m.Age,m.Level
	select m;
扩展方法用法

二次排序要用ThenBy、ThenByDescending(倒序)

var res = masterList.Where(m => m.Level > 6).OrderBy(r => r.Age).ThenByDescending(r => r.Level);

联合查询

通过一个键连接两个集合

var res = from m in masterList
	join k in kongfuList on m.Kongfu equals k.Name
	select new {master = m, kongfu = k};
	

结果

image-20200723100705086

分组

into groups

接后面?

var res = from k in kongfuList
    join m in masterList on k.Name equals m.Kongfu
    into groups
    orderby groups.Count()
    select new {kongfu = k, count = groups.Count()};

结果:

image-20200723104504237

group by

通过门派分组

var res = from m in masterList
	group m by m.Menpai 
    into g
    select new {count=g.Count(),key = g.Key};	//	g.Key Key表示是按照哪个属性分的组

结果:

image-20200723105613976

量词操作符

Any

一个满足条件

判断宗师集合中有没有丐帮的人

masterList.Any(m => m.Menpai == "丐帮");
All

全部满足条件

masterList.All(m => m.Menpai == "丐帮")

总结

image-20200723110906307

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值