初识LINQ

LINQ简介:

        LINQ是语言继承查询(Language Integrated Query) ,一组用于C#和VB的语言拓展,它允许编写C#或VB代码以查询数据库相同的方式操作内存数据. 

LINQ的产生:

        在面向对象思想的发展中,其思想日益完备,但是对于数据层面上,所有的读取查询操作必须要在sql语句的基础上进行对数据源的操作,这就是LINQ产生的原因,将查询方法进行封装,对数据源进行操作 ,它的产生,联通了数据与逻辑.

LINQ表达式,需要通过Lambda表达式表示出来.

LINQ的类库:

        在.NET类库中,LINQ相关类库都在System.Linq命名空间下,该命名空间提供支持使用LINQ进行查询的类和接口,其中最主要的是以下两个接口和类.

IEnumerable接口:它表示可以查询的数据集合,一个查询通常是逐个对集合中的元素进行筛选操作,返回一个新的IEnumerable接口,用来保存查询结果;

IQueryable接口:它集成IEnumerable接口,表示一个可以插叙的表达式目录树;

Enumerable:它通过对IEnumerable提供扩展方法,实现LINQ标准查询运算符.包括过路,导航,排序,查询,联接,求和,求最大值,求最小值等操作.

Queryable:它通过对IQueryable提供扩展方法,实现LINQ标准查询运算符.包括一系列操作.

LINQ的种类:<通过数据源划分>

  • LINQ to Object---------->数据源为实现了IEnumerable和IQueryable接口的数据集合,属于LINQ基础
  • LINQ to XML------------>数据源为XML文件,加载至内存中使用LINQ查询
  • LINQ to ADO.NET(DataSet)------>将数据库中的数据映射至内存中,通过LINQ进行查询

LINQ查询的三个必须:

  1. 数据源
  2. 创建查询
  3. 执行查询

关于Lambda表达式:

        lambda表达式是一种可用于委托或表达式目录树类型的匿名函数.通过使用lambda表达式,可以写入可作为参数传递或作为函数调用值返回的本地函数.

    表达式Lambda:

            创建Lambda表达式,需要使用goes to运算符=>,

            表达式位于=>运算符右侧的Lambda表达式称为"表达式Lambda".表达式Lambda广泛应用于表达式树的构造,表达式Lambda会返回表达式结果,并采用一下基本形式:

            (input parameters) => expression

            仅当Lambda只有一个输入参数是,括号才是可选的,否则括号是必须的,括号内的两个或多个参数需要使用逗号分隔:

            (x,y) => x == y

            使用空括号制定零个输入参数

            () => SomeMethod()

    语句Lambda:

            语句Lambda与表达式Lambda表达式类似,知识语句括在大括号中.

            (input parameters) => {statement;}

            语句Lambda的主体可以包含任意数量的语句;但是,实际上通常不多于两到三个.

 

LINQ基本表达式:

先创建几个名单

    public class Student
    {
        public string Name { get; set; }
        public int Age { get; set; }
        public int Sex { get; set; }
    }

    public class Customer
    {
        public int Cid { get; set; }
        public string Name { get; set; }
        public int Sex { get; set; }
    }

    public class Book
    {
        public int Cid { get; set; }
        public string BookName { get; set; }
    }

//实例化赋值

    Student student2 = new Student();
            
    var PersonList = new List<Student>();

    PersonList.AddRange(new Student[]
    {
        new Student {Name = "亮亮",Age = 21,Sex = 1},
        new Student {Name = "小明", Age = 15, Sex = 1},
        new Student {Name = "赵森", Age = 20, Sex = 1},
        new Student {Name = "李想", Age = 23, Sex = 1},
        new Student {Name = "张淼", Age = 25, Sex = 0},
        new Student {Name = "张媛", Age = 19, Sex = 0},
        new Student {Name = "露露", Age = 23, Sex = 0},
        new Student {Name = "张扬", Age = 17, Sex = 1},
        new Student {Name = "郝仁", Age = 24, Sex = 1},
        new Student {Name = "张丽", Age = 25, Sex = 0},
        new Student {Name = "邹汉", Age = 25, Sex = 1},
        new Student {Name = "赵敏", Age = 21, Sex = 0},
        new Student {Name = "刘丽娟", Age = 21, Sex = 0},
        new Student {Name = "孙鸥", Age = 23, Sex = 0},
        new Student {Name = "张涵云", Age = 25, Sex = 1},
        new Student {Name = "刘丽梅", Age = 24, Sex = 0},
        new Student {Name = "翰林", Age = 23, Sex = 1}
     });

     var customerli = new List<Customer>();
     var booksli = new List<Book>();
     customerli.AddRange(new Customer[]
     {
        new Customer {Name = "小明", Cid = 1, Sex = 1},
        new Customer {Name = "赵森", Cid = 2, Sex = 1},
        new Customer {Name = "李想", Cid = 3, Sex = 1},
        new Customer {Name = "张淼", Cid = 4, Sex = 0},
     });

     booksli.AddRange(new Book[]
     {
        new Book{BookName = "C",Cid = 1 },
        new Book{BookName = "C++",Cid = 2 },
        new Book{BookName = "C#",Cid = 3 },
        new Book{BookName = "Word",Cid = 1 },
        new Book{BookName = "Excel",Cid = 1 }
     });

From子句

from子句指定要查找的数据源以及范围变量,多个from子句则表示从多个数据源查找数据

var personlist = from pl in PersonList select pl;//获取数据源中所有数据

Where子句

where子句指定了筛选的条件,这也就是说在where子句中的代码段必返回布尔值才能够进行数据源的筛选.

var personlist = from pl in PersonList where pl.sex == 1 select pl;//获取男性名单

当需要多个where子句进行复合条件查询时,可以使用"&&"或"||"进行子句的整合.

Group子句

group子句将数据源中的数据进行分组

var grouplist = from gl in PersonList group gl by gl.sex;

//此时其实grouplist中长度为2,存在两个组,男和女,然后需要两个foreach进行数据的读取

Orderby子句

 orderby子句指定元素的排序字段和排序方式.当有多个排序字段时,由字段顺序确定主次关系,可以指定升降序规则,默认为升序,使用OrderbyDescending表示降序规则.

var orderlist = from ol in PersonList orderby ol.age select ol;//升序排序

var orderdesclist = PersonList.OrderByDescending(p => p);//降序排序

orderby子句同样能够进行多个条件排序,只需要将这些条件用","分隔即可

Join子句

在LINQ中同样可以使用join子句对有关系的数据源或数据对象进行查询,但是首先这两个数据源必须要有一定的联系

 var joinli = from p in customerli join book in bookli on p.cid equals book.cid select new{p.Name,p.Sex,book.BookName};
//根据两表的Cid属性获取相关的书,人,性别

如果需要返回多个字段的话,在select后使用new 关键字创建返回数据集合

 

 

 

 

 

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值