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表达式

 

posted on 2019-08-26 11:07  晴耕--雨读  阅读(351)  评论(0编辑  收藏  举报