白骑士的C#教学进阶篇 2.4 LINQ查询

21 篇文章 0 订阅

系列目录

上一篇:白骑士的C#教学进阶篇 2.3 委托与事件

        LINQ(Language Integrated Query)是C#中的一个强大特性,它提供了统一的语法来查询和操作各种数据源,如数组、集合、XML和数据库等。LINQ通过一种类似SQL的查询语言,使得数据查询变得更加直观和简洁。在本节中,我们将介绍LINQ的基本语法、查询操作,以及如何在数组、列表和字典等集合中应用LINQ,帮助您掌握这一强大的工具以编写高效的C#代码。

LINQ简介与基本语法

        LINQ允许使用类似SQL的查询语法来操作内存中的对象。LINQ查询分为三个主要部分:数据源、查询创建和查询执行。

基本语法

int[] numbers = { 1, 2, 3, 4, 5 };

// LINQ查询语法
var query = from num in numbers
            where num % 2 == 0
            select num;

foreach (var num in query)
{
    Console.WriteLine(num);
}

        在这个示例中,LINQ查询从数组‘numbers‘中选择所有偶数,并打印它们。

方法语法

        除了查询语法外,LINQ还提供了一套方法语法,这些方法作为‘Enumerable‘类的扩展方法。

int[] numbers = { 1, 2, 3, 4, 5 };

// LINQ方法语法
var query = numbers.Where(num => num % 2 == 0);

foreach (var num in query)
{
    Console.WriteLine(num);
}

        在这个示例中,使用方法语法实现了与查询语法相同的功能。

LINQ查询操作

        LINQ提供了一组强大的查询操作,用于过滤、排序、分组和转换数据。

过滤操作

        ‘Where‘方法用于过滤集合中的元素。

string[] names = { "Alice", "Bob", "Charlie", "David" };

var query = names.Where(name => name.Length > 3);

foreach (var name in query)
{
    Console.WriteLine(name);
}

        在这个示例中,‘Where‘方法过滤出所有长度大于3的名字。

排序操作

        ‘OrderBy‘和‘OrderByDescending‘方法用于对集合进行排序。

int[] numbers = { 5, 1, 3, 2, 4 };

var query = numbers.OrderBy(num => num);

foreach (var num in query)
{
    Console.WriteLine(num);
}

        在这个示例中,‘OrderBy‘方法对数组进行升序排序。

分组操作

        ‘GroupBy‘方法用于对集合进行分组。

string[] names = { "Alice", "Bob", "Charlie", "David", "Albert" };

var query = names.GroupBy(name => name[0]);

foreach (var group in query)
{
    Console.WriteLine("Names starting with " + group.Key + ":");

    foreach (var name in group)
    {
        Console.WriteLine(name);
    }
}

        在这个示例中,‘GroupBy‘方法将名字按首字母进行分组。

转换操作

        ‘Select‘方法用于将集合中的每个元素转换为新的形式。

int[] numbers = { 1, 2, 3, 4, 5 };

var query = numbers.Select(num => num * num);

foreach (var num in query)
{
    Console.WriteLine(num);
}

        在这个示例中,‘Select‘方法将数组中的每个元素平方。

LINQ与集合操作

        LINQ可以方便地与各种集合类型一起使用,包括数组、列表和字典等。

与数组操作

int[] numbers = { 1, 2, 3, 4, 5 };

var query = from num in numbers
            where num > 2
            select num;

foreach (var num in query)
{
    Console.WriteLine(num);
}

        在这个示例中,LINQ查询从数组‘numbers‘中选择所有大于2的元素。

与列表操作

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


public class Program
{
    public static void Main(string[] args)
    {
        List<string> names = new List<string> { "Alice", "Bob", "Charlie", "David" };

        var query = from name in names
                    where name.Contains("a")
                    select name;

        foreach (var name in query)
        {
            Console.WriteLine(name);
        }
    }
}

        在这个示例中,LINQ查询从列表‘names‘中选择所有包含字母"a"的名字。

与字典操作

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


public class Program
{
    public static void Main(string[] args)
    {
        Dictionary<string, int> ages = new Dictionary<string, int>
        {
            { "Alice", 30 },
            { "Bob", 25 },
            { "Charlie", 35 },
            { "David", 40 }
        };

        var query = from kvp in ages
                    where kvp.Value > 30
                    select kvp;

        foreach (var kvp in query)
        {
            Console.WriteLine(kvp.Key + " is " + kvp.Value + " years old.");
        }
    }
}

        在这个示例中,LINQ查询从字典‘ages‘中选择所有年龄大于30的键值对。

总结

        通过学习LINQ的基本语法和查询操作,您可以显著提高对各种数据源的处理效率。LINQ提供了一种统一、简洁且功能强大的方式来操作数组、列表和字典等集合,使得代码更加易读和维护。在掌握这些LINQ操作后,您可以轻松实现复杂的数据查询和处理任务。在接下来的章节中,我们将继续探索C#的高级特性和编程技巧,以进一步提升您的开发能力。

下一篇:白骑士的C#教学进阶篇 2.5 异步编程​​​​​​​

  • 19
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

白骑士所长

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值