首页 / 教程列表 / LINQ教程 / LINQ方法语法

LINQ方法语法

976 更新于: 2021-11-01 读完约需 8 分钟

LINQ方法语法(LINQ Method Syntax)

在上一节《LINQ查询语法》中,我们学习了LINQ查询语法的语法和基本使用,本节将学习LINQ的另一种语法—LINQ方法语法。

与LINQ查询语法不同的是,LINQ方法语法(也称为流畅语法)主要调用EnumerableQueryable静态类中的静态扩展方法,这和调用其他静态类的扩展方法相似。

编译器在编译时将LINQ查询语法转换为LINQ方法语法。

先看一个使用方法语法查询的示例,还是以上一节查询一个包含关键字“教程”的字符串子集合为例,但这里使用LINQ方法语法进行数据查询,代码如下:

static void Main()
{
    // 声明一个字符串集合,具体表示码友网开设的免费在线教程标题列表
    var courses = new List<string>
    {
        "C#程序设计基础",
        "LINQ教程",
        "Flurl中文文档",
        "Elasticsearch.NET/NEST中文文档",
        "C#+ADO.NET数据库入门教程"
    };

    // 使用LINQ方法语法从以上教程列表的标题中找出包含“教程”这个关键字的教程集合
    var result = courses.Where(x => x.Contains("教程"));
    Console.WriteLine("包含关键字[教程]的结果分别为:");
    // 在控制台输出查找到的结果
    foreach (var course in result)
    {
        Console.WriteLine($"{course}");
    }
    Console.ReadKey();
}

输出结果如下:

包含关键字[教程]的结果分别为:
LINQ教程
C#+ADO.NET数据库入门教程

以上示例中,首先声明了一个字符串集合courses,用来表示码友网开设的免费在线教程标题列表,分别为:《C#程序设计基础》,《C#+ADO.NET数据库入门教程》,《Flurl中文文档》,《Elasticsearch.NET/NEST中文文档》,《LINQ教程》。

接着,使用LINQ的方法语法从以上教程列表courses的标题集合中找出包含“教程”这个关键字的教程集合。

其中,调用了.Where()方法,此方法位于命名空间System.Linq的静态类Enumerable中。

打开Enumerable类的源码,可以看到.Where()方法有多个重载,其中一个是接收参数Func<TSource, bool> predicate,如下:

.Where()方法中的x => x.Contains("教程")是C#语言中的lambda表达式(下一节将详细介绍lambda表达式)。

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="线下"}
            };
            var result = orders.Where(x => x.Source == "线上");
            foreach (var order in result)
            {
                Console.WriteLine($"{order.Id},{order.Customer},{order.Price},{order.Source}");
            }
            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; }
    }
}

运行结果如下:

1,Rector,3699,线上
2,James,2699,线上
4,Steven,5699,线上

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

本文永久链接码友网 » LINQ教程 » LINQ方法语法 分享:

发表评论

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