当前位置: 首页 > article >正文

C# System.Linq提供类似SQL语法的高效查询操作

using System.Linq; 是 C# 中用于引入 LINQ(语言集成查询)功能的命名空间。LINQ 提供了一种查询数据的方式,无论数据源是数组、集合、数据库、XML 等,都可以使用一致的查询语法。以下是一些 System.Linq 中的主要内容和功能:

1. LINQ 方法

LINQ 提供了一组方法扩展 IEnumerable<T>IQueryable<T> 接口,使得对数据的查询变得更简洁和直观。这些方法被称为“LINQ 扩展方法”。

常见的 LINQ 扩展方法包括:

  • Where: 筛选符合条件的元素。

    var filtered = numbers.Where(n => n > 10);
  • Select: 投影,每个元素被转换为一个新的形式。

    var squares = numbers.Select(n => n * n);
  • OrderByOrderByDescending: 对序列进行排序。

    var sorted = numbers.OrderBy(n => n);
    var reverseSorted = numbers.OrderByDescending(n => n);
  • GroupBy: 将元素分组。

    var grouped = people.GroupBy(p => p.Age);
  • Aggregate: 聚合操作,如求和、计算平均值等。

    var sum = numbers.Aggregate((total, next) => total + next);
  • Join: 联接两个序列。

    var joined = orders.Join(customers, 
                             o => o.CustomerId, 
                             c => c.Id, 
                             (o, c) => new { o.OrderId, c.CustomerName });
    
  • FirstFirstOrDefault: 获取序列中的第一个元素。

    var first = numbers.First();
    var firstOrDefault = numbers.FirstOrDefault();
  • AnyAll: 检查序列是否满足条件。

    var anyGreaterThanTen = numbers.Any(n => n > 10);
    var allPositive = numbers.All(n => n > 0);
  • ToListToArray: 将序列转换为列表或数组。

    var list = numbers.ToList();
    var array = numbers.ToArray();

2. LINQ 查询语法

LINQ 提供了一种查询表达式的语法,这种语法类似于 SQL。你可以使用这种语法进行更直观的查询。

var query = from n in numbers
            where n > 10
            orderby n
            select n;

在这个例子中:

  • from n in numbers:定义了数据源。
  • where n > 10:指定查询条件。
  • orderby n:排序。
  • select n:选择结果。

3. 延迟执行

LINQ 查询在实际迭代时才会执行,这种特性称为延迟执行。直到对结果进行迭代(如使用 foreach)时,查询才会被执行。这允许你对查询进行组合和优化。

var query = numbers.Where(n => n > 10);

这个查询不会立即执行,而是等到你实际访问 query 时才会执行。

4. 查询操作符

LINQ 包含的操作符非常丰富,支持各种查询需求,包括聚合、排序、分组、过滤等。你可以利用这些操作符来构建复杂的查询。

var result = numbers
              .Where(n => n % 2 == 0)
              .OrderByDescending(n => n)
              .Select(n => n * n);

这个查询会先过滤出偶数,然后按降序排序,最后选择每个数字的平方。

总结

System.Linq 命名空间通过扩展方法和查询语法为 C# 提供了强大的数据查询和操作能力,使得对数据的处理变得更加直观和灵活。无论你是在处理简单的集合,还是在执行复杂的数据库查询,LINQ 都可以帮助你编写更简洁、更易于维护的代码。

System.Linq 提供的扩展方法和查询语法可以大大简化数据处理任务。扩展方法如 WhereSelectOrderBy 等,让你可以用直观的方式对集合进行筛选、转换和排序,而查询语法则提供了一种类似 SQL 的方式来表达这些操作。这种灵活性和简洁性是 LINQ 的核心优势。

using System;
using System.IO;
using System.Linq;

class txtemptyLinesProgram
{
    static void Main()
    {
        // 指定文件路径
        string filePath = "System.Linq.txt";
        
        // 读取所有行
        string[] lines = File.ReadAllLines(filePath);
        
        // 过滤掉空行
        var nonEmptyLines = lines.Where(line => !string.IsNullOrWhiteSpace(line)).ToArray();
        
        // 将处理后的内容写回到原文件
        File.WriteAllLines(filePath, nonEmptyLines);
        
        // 输出处理结果
        Console.WriteLine("处理完成:空行已被去除。");
        Console.WriteLine("处理后的行数: " + nonEmptyLines.Length);
        
        Console.ReadKey();
    }
}
// lines.Where(line => !string.IsNullOrWhiteSpace(line)):
// 这是一个 LINQ 查询,Where 方法用于筛选满足条件的行。!string.IsNullOrWhiteSpace(line) 检查每一行是否非空且不全是空白字符。
// .ToArray():将筛选出的行转换为数组,以便后续操作,比如写回文件。

这样运行程序后,原文件中的空行将被移除,并且文件内容会更新为去除空行后的结果。

  1. 代码说明

  2. 读取文件内容:使用 File.ReadAllLines(filePath) 读取所有行。
  3. 过滤掉空行:使用 LINQ 查询 lines.Where(line => !string.IsNullOrWhiteSpace(line)).ToArray() 过滤掉空行。这里 string.IsNullOrWhiteSpace 用于检查行是否为空或仅包含空白字符。
  4. 写回文件:用 File.WriteAllLines(filePath, nonEmptyLines) 将非空行写回到文件中,覆盖原文件内容。
  5. 输出结果:显示处理完成的提示信息,并输出处理后的行数。

http://www.kler.cn/news/294877.html

相关文章:

  • 吐血整理 ChatGPT 3.5/4.0 新手使用手册~ 【2024.09.03 更新】
  • 大厂嵌入式数字信号处理器(DSP)面试题及参考答案
  • 电动机制造5G智能工厂工业物联数字孪生平台,推进制造业数字化转型
  • Shell编程:正则表达式(通配符、正则概念、元字符、量词、示例等)
  • 【C++ 面试 - 新特性】每日 3 题(四)
  • 【Unity小技巧】URP管线遮挡高亮效果
  • c++标准库中对文件读写的函数与类
  • arm-linux-gnueabihf-gcc -Wall -nostdlib -c -O2 -o start.o start.s
  • 景联文科技:专业图像采集服务,助力智能图像分析
  • 关于 ubuntu系统install的cmake版本较低无法编译项目升级其版本 的解决方法
  • Vue 3中的 路由守卫:全面解析与使用教程
  • 计算机毕业设计选题推荐-茶园茶农文化交流平台-Java/Python项目实战
  • 《语文建设》
  • Map
  • C#中的各种画刷, PathGradientBrush、线性渐变(LinearGradientBrush)和径向渐变的区别
  • C++动态规划及九种背包问题
  • 结账打印--SAAS本地化及未来之窗行业应用跨平台架构
  • 828华为云征文|华为云Flexus X实例docker部署最新gitlab社区版,搭建自己的私人代码仓库
  • Python 设置跨文件的全局变量
  • C++竞赛初阶L1-15-第六单元-多维数组(34~35课)551: T456501 计算矩阵边缘元素之和
  • 利士策分享,如何规划多彩的大学生活?
  • redis中使用lua脚本
  • 在 Linux 和类 Unix 系统中,终端(Terminal)和 Shell
  • zblog自动生成文章插件(百度AI写作配图,图文并茂)
  • SpringBoot教程(十五) | SpringBoot集成RabbitMq(消息丢失、消息重复、消息顺序、消息顺序)
  • 深度学习与大模型第3课:线性回归模型的构建与训练
  • AI对于程序行业的冲击
  • Java中的配置文件
  • 记录一个拖拽组件vue3+ts
  • 汇编:嵌入式软件架构学习资源