📜  linq 查询语言 - C# (1)

📅  最后修改于: 2023-12-03 15:02:41.627000             🧑  作者: Mango

LINQ 查询语言 - C#

简介

LINQ(Language Integrated Query)是一种实现在.NET Framework中进行对象集合的查询和操作的统一技术。使用LINQ,可以通过类似于SQL的查询来从集合中选择和过滤集合的元素。

在C#中,可以使用LINQ查询语言,也称为查询表达式。查询表达式是一种简化的语法,用于编写LINQ查询。查询表达式使用一组关键字来编写查询,这些关键字类似于SQL中使用的关键字,如SELECT、FROM、WHERE等。

查询语法
基本结构

一个查询表达式由以下部分组成:

from x in y
[where z]
[orderby k]
select/deselect p

表示从集合y中选择x作为集合元素,并且选择属性p或进行转换。通过添加where从句来过滤元素,并通过orderby从句来排序。以下是一个简单的例子:

int[] numbers = {5, 1, 9, 2, 8, 0, 3, 7, 4, 6};
var query =
  from number in numbers
  where number % 2 == 0
  orderby number
  select number;

在上面的例子中,我们从numbers数组中选择偶数,并按升序排序。

使用Join联接多个集合

可以使用Join关键字在多个集合之间创建联接。以下是一个简单的例子:

class Person
{
  public int Id { get; set; }
  public string Name { get; set; }
}

class Address
{
  public int PersonId { get; set; }
  public string City { get; set; }
}

List<Person> people = new List<Person>
{
  new Person {Id = 1, Name = "John"},
  new Person {Id = 2, Name = "Mary"}
};

List<Address> addresses = new List<Address>
{
  new Address {PersonId = 1, City = "New York"},
  new Address {PersonId = 2, City = "Paris"}
};

var query =
  from person in people
  join address in addresses on person.Id equals address.PersonId
  select new {person.Name, address.City};

在上面的例子中,我们使用Join关键字将Person和Address集合联接起来,然后选择每个Person的名称和城市地址。

使用Group By分组

可以使用Group By关键字对集合进行分组并生成汇总信息。以下是一个简单的例子:

class Product
{
  public string Name { get; set; }
  public double Price { get; set; }
  public string Category { get; set; }
}

List<Product> products = new List<Product>
{
  new Product {Name="Guitar", Category="Music", Price=599.99},
  new Product {Name="Drum", Category="Music", Price=789.99},
  new Product {Name="Bass", Category="Music", Price=829.99},
  new Product {Name="Hat", Category="Clothing", Price=24.99},
  new Product {Name="Shirt", Category="Clothing", Price=29.99},
  new Product {Name="Pants", Category="Clothing", Price=34.99}
};

var query =
  from product in products
  group product by product.Category into categoryGroup
  select new { Category=categoryGroup.Key, TotalPrice=categoryGroup.Sum(p => p.Price) };

在上面的例子中,我们将产品集合按照类别进行分组,并计算每个类别的总价格。

总结

LINQ是一个非常强大的技术,可以用来处理集合数据。使用C#的查询语言可以轻松地编写出优雅、清晰的代码来查询和操作集合数据。