首页 / 教程列表 / LINQ教程 / 为什么要使用LINQ?

为什么要使用LINQ?

1957 更新于: 2021-10-31 读完约需 10 分钟

概述

在上一节《什么是LINQ?》中,我们了解了LINQ的基本概念。那么,有读者朋友可能会问了:“为什么我们要使用LINQ这样的查询工具?使用LINQ仅仅是为了方便同时使用编程语言来处理关系数据以及XML文档吗?”。

本节,我们就来学习在C#语言的应用程序编程开发中,为什么要使用LINQ?它在C#开发中为我们带来了哪些好处?

为什么要使用LINQ?

编程语言中,绝大多数语法和功能的出现,都是为了解决一个或一些问题的,LINQ也不例外。在回答“为什么要使用LINQ?”这个问题之前,得先回到问题的本身。

还是以上一节的筛选成绩集合为例,成绩集合如下:

int[] scores = new int[] { 97, 92, 81, 60 };

现在,要从这个成绩集合列表scores中找出大于80的子集合,在C#编程语言中,以传统的编程方式(假如没有LINQ)应该如何实现呢?

是不是得使用循环语句(for, foreach)遍历这个scores数组集合,然后检查每一个元素与给定值80的大小关系呢?你的C#代码方法可能类似如下:

/// <summary>
/// 传统的遍历方式
/// </summary>
/// <param name="scores"></param>
/// <returns></returns>
static List<int> TraditionalMethod(int[] scores)
{
    var result = new List<int>();
    foreach (int score in scores)
    {
        if (score > 80)
        {
            result.Add(score);
        }
    }
    return result;
}

从实现功能和最终的效果上来说,以上代码实现方式并没有任何问题。但使用循环遍历的方式从代码的可读性、可维护性上来说就显得不是那么友好了。

以上示例只是从整型数组中抽取元素值大于80的子集合,如果抽取的条件或者集合类型(数据源)不相同,那么是不是需要每种情况都实现相应的抽取数据的方法呢?这大降低了代码的可重用性和可维护性。

如下,我们再使用LINQ演示一个对象集合的数据抽取方法(对比传统的遍历方式):

using System;
using System.Collections.Generic;
using System.Linq;

namespace ConsoleApp2
{
    public class Program
    {
        static void Main()
        {
            var orders = new List<Order>
            {
                new Order{Id = 1, Customer="Rector",Price= 3699.00D,Source="线上"},
                new Order{Id = 2, Customer="James",Price= 2699.00D,Source="线上"},
                new Order{Id = 3, Customer="Chris",Price= 1999.00D,Source="线下"},
                new Order{Id = 4, Customer="Steven",Price= 5699.00D,Source="线上"},
                new Order{Id = 5, Customer="Jo",Price= 2569.00D,Source="线下"}
            };

            // 1.查询ID=1的所有订单
            var result1 = orders.Where(x => x.Id == 1);

            // 2.查询价格大于3000.00的所有订单
            var result2 = orders.Where(x => x.Price > 3000);

            // 3.查询订单来源为线上的所有订单(Source="线上")
            var result3 = orders.Where(x => x.Source == "线上");

            // 4.分组统计线上订单和线下订单的合计金额
            var result4 = orders.GroupBy(g => g.Source)
                .Select(g =>
                new
                {
                    Source = g.Key,
                    Amount = g.Sum(x => x.Price)
                });

            // 5.其他过滤条件

            Console.ReadKey();
        }
    }

    /// <summary>
    /// 订单实体
    /// </summary>
    public class Order
    {
        /// <summary>
        /// ID
        /// </summary>
        public int Id { get; set; }
        /// <summary>
        /// 客户名称
        /// </summary>
        public string Customer { get; set; }
        /// <summary>
        /// 订单金额
        /// </summary>
        public double Price { get; set; }
        /// <summary>
        /// 订单来源
        /// </summary>
        public string Source { get; set; }
    }
}

以上演示了使用LINQ对数据源进行查询或聚合的部分功能。可以看到,使用LINQ对数据源的操作远远比传统遍历方式更简洁、更优雅、更快捷。基于这些优点和好处,我们为什么不选择LINQ来提升编码效率呢?

在C#语言中,使用LINQ具有如下的优点:

  • 熟悉的语言:C#,VB.NET,F#开发者无需学习额外的语法
  • 写更少的代码:与更传统的方法相比,LINQ减少了需要编写的代码量
  • 可读性更高:LINQ使代码更具可读性,因此其他开发人员可以轻松地理解和维护它
  • 标准化方式查询多个数据源:可以使用同样的LINQ语法查询多个数据源
  • 编译时查询的安全性:LINQ查询支持在编译时提供对象的类型检查
  • 智能感知的支持:LINQ为泛型集合提供了智能感知
  • 数据重塑:LINQ查询可以检索并返回不同类型的数据

版权声明:本作品系原创,版权归码友网所有,如未经许可,禁止任何形式转载,违者必究。

本文永久链接码友网 » LINQ教程 » 为什么要使用LINQ? 分享:

发表评论

登录用户才能发表评论, 请 登 录 或者 注册