查询语法(Query Syntax)
.NET应用程序开发中的LINQ查询语法(Query Syntax)与数据库的SQL语句有些类似,你可以在C#,VB.NET或者F#任意一种编程语言中使用LINQ的查询语法,本系列文章将主要使用C#语言进行示例演示。
LINQ查询语法的格式如下:
from <集合变量(别名)> in <集合(实现了IEnumerable或IQueryable)>
<标准查询操作符> <lambda表达式>
<select或groupBy操作符> <返回信息>
LINQ查询语法以from
关键字开始,以select
关键字结束。下面是一个LINQ查询示例,它返回一个包含关键字“教程”的字符串子集合。
// 引入System.Linq命名空间
using System.Linq;
static void Main()
{
// 声明一个字符串集合,具体表示码友网开设的免费在线教程标题列表
var courses = new List<string>
{
"C#程序设计基础",
"LINQ教程",
"Flurl中文文档",
"Elasticsearch.NET/NEST中文文档",
"C#+ADO.NET数据库入门教程"
};
// 使用LINQ查询语法从以上教程列表的标题中找出包含“教程”这个关键字的教程集合
var result = from x in courses
where x.Contains("教程")
select x;
Console.WriteLine("包含关键字[教程]的结果分别为:");
// 在控制台输出查找到的结果
foreach (var course in result)
{
Console.WriteLine($"{course}");
}
Console.ReadKey();
}
注:使用LINQ语法,需引入命名空间
System.Linq
。
以上示例中,首先声明了一个字符串集合courses
,用来表示码友网开设的免费在线教程标题列表,分别为:《C#程序设计基础》,《C#+ADO.NET数据库入门教程》,《Flurl中文文档》,《Elasticsearch.NET/NEST中文文档》,《LINQ教程》。
接着,使用LINQ的查询语法从以上教程列表courses
的标题集合中找出包含“教程”这个关键字的教程集合,如下图:
下面来分析上图中各个标号的含义:
1.定义一个变量result
用以保存LINQ的查询结果。
2.使用from
关键字开始LINQ查询语法,然后定义一个集合的变量(别名),它是集合courses
的别名,类似SQL语句中表的别名。这里定义的是x
,你可以定义为符合C#语言变量命名规范的任意变量名。
3.实现了IEnumerable
或IQueryable
的集合。
4.查询操作符,使用where
关键字表示对courses
集合进行数据筛选。在from
子句之后,可以使用不同的标准查询操作符来过滤、分组和连接集合的元素,LINQ中内置了大约50个标准查询操作符。
5.x.Contains("教程")
查询条件(以lambda表达式方式书写)。
6.使用select
关键字以返回查询结果,select x
表示把符合条件的元素原样返回,当然也可以返回其他形式的结果,后续内容将具体介绍。
LINQ查询语法实例
以下是一个对订单集合进行的LINQ查询操作,找出订单集合orders
中来源为”线上”的所有订单,代码示例如下:
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 = from o in orders
where o.Source == "线上"
select o;
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,线上
发表评论
登录用户才能发表评论, 请 登 录 或者 注册