LINQ查询
LINQ查询的语句
from in//集合查询
join in on //集合联合查询
orderby//将查询到的对象按条件从小到大排序
orderby 条件 descending //将查询到的对象按条件从大到小排序
where 查询的判断条件
select 返回查询后的值
group 分组 into 分组的队象 //对查询的结果分组 groups by 属性 into // 用对象自身的属性分组
equals 判断二者是否相等
any all 量词操作符 集合.any(条件语句)只要集合中有一个对象符合条件,就返回true ,都不满足则返回false
集合.all(条件语句) 集合中所有对象都满足条件才返回true 否则返回false
集合查询
var res = from m in master// from in 将集合master中的对象一个一个放入m where m.Level > 8//where 判断语句后面加判断条件 select m;//返回符合条件的master对象 foreach (var item in res)//将查询到的对象的名字打印出来 { Console.WriteLine(item.Name); } Console.ReadKey();
集合查询的扩展方法
var res = master.Where(test);//将master集合中的对象一个一个传入test方法内,接收到true就把对象存入res集合中 public static bool test(Person p)//扩展方法,将集合中的对象传入扩展方法 { if(p.Level>8) { return true; } else { return false; } }
集合联合查询
第一种方法 利用两个from in 将两个集合中的对象取出判断
//LINQ语句查询 var res = from m in master// from in 将集合master中的对象一个一个放入m from k in kongfu//from in 将集合kongfu中的对象一个一个放入k where m.Level > 8&&k.Lethality>10//where 判断语句后面加判断条件 select m;//返回符合条件的master对象 foreach (var item in res)//将查询到的对象的名字打印出来 { Console.WriteLine(item.Name); } Console.ReadKey();
第二种方法利用 join k in List on 联合条件
var res = from m in master// from in 将集合master中的对象一个一个放入m join k in kongfu on m.Kongfu equals k.Name//join k in kongfu将类中的对象一个一个拿出放在K中,on 后面加判断语句 where m.Level > 8&&k.Lethality>10//where 判断语句后面加判断条件 select m;//返回符合条件的master对象
equals 是判断是否相等的
对查询结果排序
orderby//将查询到的对象按条件从小到大排序
var res = from m in master//from in 将集合master中的对象一个一个放入m where m.Age > 30//选择年龄大于30的对象 orderby m.Age//把选择出的对象按年龄排序,默认从大到小排序 select m;//将排好的对象放入res集合中
var res = from m in master//from in 将集合master中的对象一个一个放入m where m.Age > 30//选择年龄大于30的对象 orderby m.Age,m.Level//把选择出的对象按年龄排序年龄相等按等级排序,默认从大到小排序 select m;//将排好的对象放入res集合中
扩展方法
var res1 = master.Where(m => m.Level > 8).OrderBy(m => m.Age);//OrderBy()将m对象按age从大到小排序 var res2 = master.Where(m => m.Level > 9).OrderBy(m => m.Age).ThenBy(m => m.Level);//OrderBy()将m对象按age从大到小排序,age相同的对象用ThenBy()按level排序
orderby 条件 descending //将查询到的对象按条件从大到小排序
var res = from m in master//from in 将集合master中的对象一个一个放入m where m.Age > 30//选择年龄大于30的对象 orderby m.Age descending //把选择出的对象按年龄排序,descending 让对象从大到小排序 select m;//将排好的对象放入res集合中
对查询结构分组
对联合查询结果排序
var res = from m in kongfu join k in master on m.Name equals k.Kongfu //联合查询 into groups//into 对查询结果分组,分组后把数据存储在groups队象中 orderby groups.Count()//按每组队象的个数排序 select new { name = m.Name, count = groups.Count() };//直接用new{}一个新的对象,name是对象的属性,count也是新对象的属性,用res集合存储这个新对象
按对象的某个属性分组
var res = from m in master//集合master查询 group m by m.Menpai into groups//从m对象中按menpai属性分组,分组的数据放在groups中 select new {manpai=groups.Key,count=groups.Count() };//新生成对象,对象有manpai和count属性,groups.key是分组的条件属性,groups.count是每一组的数量
select new{ }//返回新生成的对象,放入集合中
量词操作符
bool istrue = master.Any(m => m.Level <0); bool istrue1 = master.All(m=>m.Level>5); Console.WriteLine(istrue); Console.WriteLine(istrue1);
any 和all只能使用lanmbda表达式