LINQ概念?组成部分?分类?语法?

概念:

LINQ(Language Integrated Query)是一种C#语言中的查询技术,它允许我们在代码中使用类似SQL的查询语句来操作各种数据源。这些数据源可以是集合、数组、数据库、XML文档等等。LINQ提供了一种统一的编程模型,使我们能够使用相同的方式来查询和操作不同类型的数据。

在C#中,LINQ主要由以下几个组成部分数据源(Data source):可以是集合、数组、数据库、XML文档等等。 查询变量(Query variable):用于存储查询结果的变量。 查询表达式(Query expression):类似于SQL语句的查询表达式,用于描述查询的逻辑和条件。 查询操作符(Query operator):用于执行各种查询操作,如筛选、排序、分组、投影等等。 查询结果(Query result):查询操作的返回结果。

其中数据源,查询变量,查询结果是必选项,查询表达式,查询操作符是可选项。

分类

LINQ To Entities:

LINQ to Entities 是 Entity Framework 的一部分并且取代 LINQ to SQL 作为在数据库上使用 LINQ 的标准机制。Entity Framework 是行业领先的对象-关系映射(ORM)系统。可以和多种数据库一起使用,并支持各种灵活、复杂的数据模型 LINQ To Objects :

主要负责对象的查询(是指直接对任意IEnumerable集合使用LINQ查询,无需使用中间LINQ程序或API。LINQ To Object 提供的是内存中集合数据的实体映射. LINQ To XML:

在System.Xml.LINQ命名空间下实现对XML的操作。采用高效、易用、内存中的XML工具在宿主编程语言中提供XPath/XQuery功能等

基础语法使用

LINQ使用方式1:使用LINQ查询表达式

  • LINQ 查询表达式是一种类似 SQL 的语法,用于从各种数据源(如数组、集合等)中查询数据。
  • 在代码中,通过 fromwhereorderbyselect 等关键字来构建查询,从 scoresnamesstudents 等数据源中筛选、排序数据,然后获取结果并进行输出等操作。
private void button1_Click(object sender, EventArgs e)
{
    int[] scores = new int[] { 98, 45, 77, 888, 81, 51 };

    //注意:命名空间


    //from关键字  从哪里查
    //s查询变量 查询变量名和命名相同
    //in 在那个数据源中查询
    //scores 数据源(数组 集合 sql数据库 xml文档)
    //数据源后面 是查询条件 和sql的查询条件类似 
    //筛选条件: ==  != > < >= <=  逻辑运算符  && || !

    

    IEnumerable<string> query = from s in scores 
                             where s>=50 && s<=100
                  // 默认是ascending 升序  descending 降序
                                orderby s  descending
                                select s + "分";

    Console.WriteLine(query.ToList()[0]);
    Console.WriteLine(query.ToList().Count);


    foreach (string i in query)
    {
        Console.WriteLine(i);
    }


    string[] names = { "吴亦凡", "罗志祥", "李云迪" };


    //查询表达式中的重要子句  from子句  where子句  select子句  orderby子句 group子句
    IEnumerable<string> query1 = from n in names 
                                 //查询以"凡"结尾的字符串
                                // where n.EndsWith("凡")
                                //where n.IndexOf("吴")!=-1
                                where n.StartsWith("罗")
                                 select n;

    Console.WriteLine(query1.Count());//长度


    foreach (string i in query1)
    {  Console.WriteLine(i); }


    Student[] students = {
    new Student(){Id=1,Name="吴亦凡",Favorites=new string[]{ "写代码1","打游戏1"} },
    new Student(){Id=2,Name="蔡徐坤",Favorites=new string[]{ "写代码2","打篮球2","打游戏2"} },
    new Student(){Id=3,Name="罗志祥",Favorites=new string[]{ "写代码3","打篮球3","打游戏3"} },

    };

    //如果有多个数据源 一般后面的数据源能使用前面数据源中的数据 反过来不行 
    //只能有一个结果集
    var query2 =from s in students //第一个数据源 类型Student
                where s.Name== "吴亦凡" //对第一个数据源筛选

                from f in s.Favorites //第二个数据源 类型 string[]
                where f.Contains("打篮球")//对第二个数据源筛选
                select  f;//结果集

    foreach (var i in query2)
    { Console.WriteLine(i); }

}

LINQ使用方式1:使用扩展方法

  • LINQ 扩展方法是一系列定义在 IEnumerable<T> 等接口上的方法(如 WhereOrderByDescendingSelect 等),可以通过方法链的形式来对数据源进行操作。
  • 在代码中,通过调用 ints 的 Where 方法筛选元素,再调用 OrderByDescending 方法进行降序排序,最后调用 Select 方法进行投影,从而得到结果并输出。
 private void button2_Click(object sender, EventArgs e)
 {
     int[] ints = { 1, 2, 3,6,5,7 };

     //Where() 高阶函数  筛选   和Find  类似
     //Where(Func) 相当于是  where子句 
     //IEnumerable<int> query1 = ints.Where((item) => { return item >= 2; });

     //IEnumerable<int> query2 = ints.Where(v => v >= 2);

     //OrderBy  升序  等同于  orderby ascending
     //OrderByDescending 降序 等同于 orderby descending
     IEnumerable<int> query2 = ints.Where(v => v >= 2).OrderByDescending(v=>v).Select(v=>v);

     foreach (var i in query2)
     {
         Console.WriteLine(i);
     }
 }

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值