C# LINQ学习

LINQ介绍

LINQ(Language Integrated Query )语言集成查询,是一组用于C#和VB语言的拓展,它允许VB或者C#代码以操作内存数据的方式,查询数据库。简单的来说就是类似数据库(sql)的查询语句。

前期准备工作

首先定义两个类,方便后续操作

class Skip
    {
        public int id;
        public string skip;
        public int power;

        public override string ToString()
        {
            return string.Format("id:{0},skip:{1},power:{2}", id, skip, power);
        }
    }
class Cat
    {
        public string name;
        public int id;
        public string skip;
        public int level;

        public override string ToString()
        {
            return string.Format("id:{0},name:{1},skip:{2},level:{3}", id, name, skip, level);
        }
    }

接下来添加数据

var catList = new List<Cat>
            {
                new Cat(){id=1,name="a",skip= "zhua",level = 10 },
                new Cat(){id=5,name="b",skip= "nao",level = 1 },
                new Cat(){id=6,name="c",skip= "tian",level = 11 },
                new Cat(){id=3,name="d",skip= "zhua",level = 2 },
                new Cat(){id=4,name="e",skip= "da",level = 7 },
                new Cat(){id=2,name="f",skip= "nao",level = 6 }
            };

var skipList = new List<Skip>
            {
                new Skip(){id=1,skip="zhua",power=100 },
                new Skip(){id=2,skip="nao",power=10 },
                new Skip(){id=3,skip="da",power=30 },
                new Skip(){id=4,skip="tian",power=90 },
            };

前期准备工作完成,进入语句学习

查询语句
  • 普通查询

采用类似sql的from,where,select语句。

//1.LINQ查询语句
            var res = from c in catList
                      where c.level > 2
                      select c;

            foreach (var temp in res)
            {
                Console.WriteLine(temp);
            }
            Console.ReadKey();

输出结果:在这里插入图片描述

扩展方法:对语句的一种简写,使用已经定义好的函数。

var res = catList.Where(m => m.level > 2);

得到的结果是一样的
在这里插入图片描述

从图中可以看到,List本身有Where查询函数,其传入的参数为一个委托(委托参数为Cat类型,返回值为bool类型),返回一个集合。

  • 联合查询

联合查询类似表与表的全连接。

var res = from c in catList
                      from s in skipList
                      where c.skip==s.skip && s.power>20
                      select new {cat=c,skip=s};

扩展方法:

var res = catList.SelectMany(s => skipList, (c, s) => new { cat = c, skip = s }).Where(x=>x.cat.skip==x.skip.skip && x.skip.power>20);

其实看起来扩展方法是方便了一些,但直观性没有LINQ语句来的好,看个人喜好使用。

Join in关键字进行联合查询:

var res = from c in catList
                      join s in skipList on c.skip equals s.skip
                      select new { cat = c, skip = s };
  • 对查询的结果进行排序

使用orderby关键字进行排序,descending为逆序,正序则删除

var res = from c in catList
                      from s in skipList
                      where c.skip == s.skip && s.power > 20
                      orderby s.power,c.id descending
                      select new { cat = c, skip = s };

如果排序字段相同,则可以基于前面的排序结果添加新的排序条件。

扩展方法:

var res = catList.Where(c => c.level > 2).OrderBy(s => s.level);
//如果排序字段相同的情况下
var res = catList.Where(c => c.level > 2).OrderBy(c => c.level).ThenBy(c => c.id);
  • 对查询结果进行分组

使用into关键字

var res = from s in skipList
                      join c in catList on s.skip equals c.skip
                      into groups
                      select new { skip = s,count= groups.Count()};

使用group by关键字(根据自身分组)

var res = from c in catList
                      group c by c.skip 
                      into groups
                      select new {count= groups.Count(),key=groups.Key};
总结

先到这,以后如果学习到其他语句,会继续添加

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值