LINQ查询

LINQ是微软提供的语言集成查询技术,解决了.NET开发中面向对象编程与数据库访问的分离问题,允许在C#中直接进行查询操作。本文介绍了LINQ的基本概念,包括Language Integrated Query、LINQ的组成如LINQ to Objects、LINQ to XML等,并详细讲解了Select、Where、OrderBy和GroupBy等查询方法的应用。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

LINQ能够解决的问题

.NET平台开发中一直存在的情况:

  1. 面向对象编程语言与数据库访问方法长期分离,以嵌入式方式开发

    嵌入式SQL语句没有任何提示,很容易出错

  2. 编程语言中的数据类型与数据库中的数据类型完全是两套体系

    例如:C#中字符串string在SQL中使用varchar/Nvarchar/char来表示

  3. SQL和XML都有各自的查询语言,而对象没有自己的查询语言

    例如:要从一个List< T>集合或者数组中找到符合要求的元素非常困难。

LINQ查询重点解决以上问题

LINQ是什么

LINQ(Language Integrated Query)

语言集成查询

  1. 是微软公司提供的一项新技术,能够将查询功能直接引入到C#、VB.NET等编程语言中

  2. 查询操作可以通过编程语言自身来表示,而不是嵌入字符串SQL语句

LINQ的组成

  1. LINQ to Objects 主要负责对象的查询

  2. LINQ to XML 主要负责XML的查询

  3. LINQ to ADO.NET 主要负责数据库的查询

    1. LINQ to SQL (目前已经没人使用)

    2. LINQ to DataSet

    3. LINQ to Entities (重点学习)

LINQ的命名空间

  1. System.Linq;该命名空间已经由系统自动引入

  2. 因此微软默认建议多使用Linq技术查询

LINQ的组成架构

不采用LINQ技术的查询

 static void Main(string[] args)
        {
            //1.从数组中拿到所有的偶数
            int[] nums = { 1, 22,18,2, 3, 5, 7, 6, 8, 9, 23, 12 };
            List<int> list = new List<int>();
            foreach (int item in nums)
            {
                if (item%2==0)
                {
                    list.Add(item);
                }
            }
            list.Sort();
            list.Reverse();
            for (int i = 0; i < list.Count; i++)
            {
                Console.WriteLine(list[i]);
            }
            Console.ReadLine();
        }

 

采用LINQ技术进行查询

  int[] nums = { 1, 22, 18, 2, 3, 5, 7, 6, 8, 9, 23, 12 };
            var list = from item in nums
                       where item % 2 == 0
                       orderby item descending
                       select item;
            foreach (var item in list)
            {
                Console.WriteLine(item);
            }

LINQ查询方法

获取数据方法

扩展方法:Select()

  1. Select()是一个泛型扩展方法

  2. Select()方法使用的时候,要求传递一个委托实例(委托实例就是一个方法)

Select()方法应用

  int[] nums = { 1, 22, 18, 2, 3, 5, 7, 6, 8, 9, 23, 12 };
            var list = nums.Select(item=>item*2);
            foreach (var item in list)
            {
                Console.WriteLine(item);
            }
  1. Select()方法里面是一个Lambda表达式

  2. 返回结果是一个迭代[隐式循环]器(Iterator)

  3. 不论数组还是集合都可以使用Select()扩展方法

筛选数据方法

扩展方法:Where()

  1. Where()方法是一个扩展泛型方法

  2. Where()方法使用的时候要求传递一个委托实例,但该实例是一个判断条件,因此返回的类型必须是bool类型

Where()方法应用

  var list = nums.Where(item => item % 2 != 0).Select(item=>item*2);
            foreach (var item in list)
            {
                Console.WriteLine(item);
            }

“链式编程”:在一个方法完成之后可以继续紧接着调用方法

注意:链式编程在每个环节之后能否继续链式要考虑这个环节的结果是否是集合

排序数据方法

扩展方法:OrderBy()

  1. OrderBy()是一个扩展方法

  2. OrderBy()里面的参数要求传递一个排序字段,默认按照升序排序

  3. 如果需要降序排列可以使用OrderByDescending方法

OrderBy()方法应用

 var list = nums.Where(item => item % 2 == 0)
                .Select(item => item * 2)
                .OrderBy(item=>item);
            foreach (var item in list)
            {
                Console.WriteLine(item);
            }
  string[] arry = { "张三","李四","王五","赵六","陈七","宋八","杜九"};

            var list = arry.Select(item => item).OrderBy(item => item.Substring(1,1));
            foreach (var item in list)
            {
                Console.WriteLine(item);
            }

分组数据方法

扩展噶GroupBy()

  1. GroupBy()是一个扩展方法

  2. GroupBy()里面的参数要求传递一个分组字段

GroupBy()方法应用

  var list = arry.Select(item => item).GroupBy(item => item.Substring(0, 1));
            foreach (var item in list)
            {
                Console.WriteLine("---------------------------");
                Console.WriteLine("分组字段:" + item.Key);
                foreach (var i in item)
                {
                    Console.WriteLine(i);
                }
            }

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值