LINQ方法语法(LINQ Method Syntax)
在上一节《LINQ查询语法》中,我们学习了LINQ查询语法的语法和基本使用,本节将学习LINQ的另一种语法—LINQ方法语法。
与LINQ查询语法不同的是,LINQ方法语法(也称为流畅语法)主要调用Enumerable
或Queryable
静态类中的静态扩展方法,这和调用其他静态类的扩展方法相似。
编译器在编译时将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,线上
发表评论
登录用户才能发表评论, 请 登 录 或者 注册