语言集成查询:LINQ C#

Quibbler 7月前 521

语言集成查询:LINQ


        LINQ(Language Integrated Query,语言集成查询)是 Microsoft 在 .NET Framework 3.5 中引入的一种强大的查询技术,用于在 .NET 编程语言中以声明式的方式查询和操作数据。LINQ 提供了一种统一的查询语法,可以用于查询各种数据源,包括内存中的集合(如数组、列表)、数据库(如 SQL Server)、XML 文档等。



1、LINQ 的主要特点

        统一的查询语法:LINQ 提供了一种统一的查询语法,使得开发者可以使用相同的语法查询不同类型的数据源。

        例如,你可以用相同的查询语法查询内存中的列表和数据库中的表。

        类型安全:LINQ 查询在编译时进行类型检查,减少了运行时错误。

        这使得代码更加健壮,易于维护。

        延迟执行:LINQ 查询通常采用延迟执行(Lazy Evaluation),即查询不会立即执行,而是在需要时才执行。

        这可以提高性能,特别是在处理大数据集时。

        扩展性:LINQ 提供了丰富的扩展方法,使得开发者可以轻松地扩展查询功能。

        例如,你可以通过扩展方法添加自定义的查询操作。



2、LINQ 的主要组成部分


2.1、LINQ to Objects

         用于查询内存中的集合,如数组、列表等。例如:

    var numbers = new List<int> { 1, 2, 3, 4, 5 };
    var evenNumbers = numbers.Where(n => n % 2 == 0);


2.2、LINQ to SQL

        用于查询和操作关系数据库,如 SQL Server。例如:

    using (var db = new MyDbContext())
    {
        var customers = db.Customers.Where(c => c.City == "London");
    }


2.3、LINQ to XML

        用于查询和操作 XML 数据。例如:

    XDocument doc = XDocument.Load("books.xml");
    var books = doc.Descendants("book")
               .Where(b => (string)b.Element("author") == "AuthorName");


2.4、LINQ to Entities

        用于查询和操作 Entity Framework 的数据模型。例如:

    using (var context = new MyDbContext())
    {
        var products = context.Products
                          .Where(p => p.Price > 100)
                          .Select(p => p.Name);
    }



3、LINQ 的查询语法

        LINQ 提供了两种主要的查询语法:方法链式语法(Method Syntax)和查询表达式语法(Query Expression Syntax)。


3.1、方法链式语法

        方法链式语法使用扩展方法来构建查询。例如:

    var numbers = new List<int> { 1, 2, 3, 4, 5 };
    var evenNumbers = numbers.Where(n => n % 2 == 0).Select(n => n * 2);


3.2、查询表达式语法

        查询表达式语法使用类似 SQL 的语法来构建查询。例如:

    var numbers = new List<int> { 1, 2, 3, 4, 5 };
    var evenNumbers = from n in numbers
                  where n % 2 == 0
                  select n * 2;



4、LINQ 的常见操作

        过滤(Filtering):使用 Where 方法过滤数据。例如:numbers.Where(n => n > 3)

        投影(Projection):使用 Select 方法投影数据。例如:numbers.Select(n => n * 2)

        排序(Sorting):使用 OrderBy 和 OrderByDescending 方法排序数据。例如:numbers.OrderBy(n => n)

        分组(Grouping):使用 GroupBy 方法对数据进行分组。例如:numbers.GroupBy(n => n % 2)

        聚合(Aggregation):使用 Count、Sum、Max、Min 等方法对数据进行聚合操作。例如:numbers.Count()


        LINQ 是一种强大的查询技术,它通过统一的查询语法,使开发者能够以声明式的方式查询和操作各种数据源。LINQ 提供了丰富的扩展方法和两种主要的查询语法(方法链式语法和查询表达式语法),使得代码更加简洁、易读和易于维护。



5、 LINQ 查询示例

        展示如何使用 LINQ 查询内存中的集合:

using System;
using System.Collections.Generic;
using System.Linq;
class Program
{
    static void Main()
    {
        // 创建一个列表
        var numbers = new List<int> { 1, 2, 3, 4, 5, 6, 7, 8, 9, 10 };
        // 使用方法链式语法
        var evenNumbers = numbers
            .Where(n => n % 2 == 0)          // 过滤偶数
            .Select(n => n * 2)             // 将每个偶数乘以2
            .OrderByDescending(n => n);     // 按降序排序
        // 输出结果
        foreach (var number in evenNumbers)
        {
            Console.WriteLine(number);
        }
        // 使用查询表达式语法
        var evenNumbersQuery = from n in numbers
                               where n % 2 == 0
                               select n * 2 into result
                               orderby result descending
                               select result;
        // 输出结果
        foreach (var number in evenNumbersQuery)
        {
            Console.WriteLine(number);
        }
    }
}


不忘初心的阿甘
最新回复 (0)
    • 安卓笔记本
      2
        登录 注册 QQ
返回
仅供学习交流,切勿用于商业用途。如有错误欢迎指出:fluent0418@gmail.com