概述
在上一节《什么是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查询可以检索并返回不同类型的数据
发表评论
登录用户才能发表评论, 请 登 录 或者 注册