📅  最后修改于: 2023-12-03 15:02:41.653000             🧑  作者: Mango
LINQ(Language Integrated Query)是一种语言级别集成的查询技术,可以用于从各种数据源中获取数据。查询运算符是 LINQ 的重要组成部分,它们提供了一组方法,用于查询数据。
在本文中,我们将介绍一些常用的查询运算符,以及它们的用法和示例代码。
查询运算符是 LINQ 的扩展方法,它们可以通过调用 System.Linq
命名空间中的静态方法来使用。查询运算符的基本语法如下:
var result = from item in source
[where condition]
[orderby field]
[select item];
其中,source
可以是一些集合数据类型,如 List
、Array
、Dictionary
等,也可以是实现 IEnumerable
或 IQueriable
接口的数据源。where
和 orderby
是可选的关键字,用于指定查询条件和排序方式。select
用于指定查询的结果。
具体的查询运算符会使用不同的语法和关键字,下面我们将逐个介绍。
Where 方法用于筛选序列中满足指定条件的元素,并返回一个新的序列。它的语法如下:
var result = source.Where(item => condition);
其中,item
表示遍历序列时的当前元素,condition
是一个返回布尔值的 lambda 表达式,表示筛选条件。
例如,我们可以使用 Where 方法从一个整数集合中筛选出大于 5 的元素:
int[] numbers = { 1, 2, 3, 4, 5, 6, 7, 8, 9, 10 };
var result = numbers.Where(n => n > 5);
foreach (var item in result)
{
Console.WriteLine(item);
}
// Output: 6, 7, 8, 9, 10
Select 方法用于对序列中的每个元素进行投影操作,并返回一个新的序列。它的语法如下:
var result = source.Select(item => expression);
其中,item
表示遍历序列时的当前元素,expression
是一个返回任意类型的 lambda 表达式,表示对元素进行投影的操作。
例如,我们可以使用 Select 方法对一个字符串集合中的每个元素进行转换并返回相应的长度:
string[] words = { "apple", "banana", "cherry", "date" };
var result = words.Select(s => s.Length);
foreach (var item in result)
{
Console.WriteLine(item);
}
// Output: 5, 6, 6, 4
OrderBy 方法用于对序列中的元素按指定字段进行升序排序,并返回一个新的序列。它的语法如下:
var result = source.OrderBy(item => field);
其中,item
表示遍历序列时的当前元素,field
是一个表示排序字段的 lambda 表达式。
例如,我们可以使用 OrderBy 方法对一个字符串集合按长度进行升序排序:
string[] words = { "apple", "banana", "cherry", "date" };
var result = words.OrderBy(s => s.Length);
foreach (var item in result)
{
Console.WriteLine(item);
}
// Output: date, apple, banana, cherry
GroupBy 方法用于对序列中的元素按指定字段进行分组,并返回一个新的序列。它的语法如下:
var result = source.GroupBy(item => field);
其中,item
表示遍历序列时的当前元素,field
是一个表示分组字段的 lambda 表达式。
例如,我们可以使用 GroupBy 方法对一个字符串集合按首字母进行分组:
string[] words = { "apple", "banana", "cherry", "date" };
var result = words.GroupBy(s => s[0]);
foreach (var group in result)
{
Console.WriteLine($"Group '{group.Key}':");
foreach (var item in group)
{
Console.WriteLine($" {item}");
}
}
// Output:
// Group 'a':
// apple
// Group 'b':
// banana
// cherry
// Group 'd':
// date
Join 方法用于将两个序列中的元素进行关联,并返回一个新的序列。它的语法如下:
var result = source.Join(
inner,
outerKeySelector,
innerKeySelector,
resultSelector);
其中,source
和 inner
分别表示要关联的两个序列,outerKeySelector
和 innerKeySelector
分别表示两个序列中要匹配的键,resultSelector
表示关联后需要返回的结果。
例如,我们可以使用 Join 方法将两个实体集合进行关联:
class Person
{
public int Id { get; set; }
public string Name { get; set; }
}
class Order
{
public int PersonId { get; set; }
public string ProductName { get; set; }
}
List<Person> people = new List<Person>
{
new Person { Id = 1, Name = "Alice" },
new Person { Id = 2, Name = "Bob" },
new Person { Id = 3, Name = "Charlie" },
};
List<Order> orders = new List<Order>
{
new Order { PersonId = 1, ProductName = "Apple" },
new Order { PersonId = 2, ProductName = "Banana" },
new Order { PersonId = 3, ProductName = "Cherry" },
};
var result = people.Join(
orders,
p => p.Id,
o => o.PersonId,
(p, o) => new { Name = p.Name, ProductName = o.ProductName });
foreach (var item in result)
{
Console.WriteLine($"Person '{item.Name}' bought '{item.ProductName}'.");
}
// Output:
// Person 'Alice' bought 'Apple'.
// Person 'Bob' bought 'Banana'.
// Person 'Charlie' bought 'Cherry'.