C# LINQ 查询语句和方法的区别及使用

C# LINQ(Language-Integrated Query)是一种强类型、编译时的查询技术,它可以通过统一的语法对多种数据源进行查询和操作,包括对象、集合、数据库等。LINQ 提供了两种查询方式:查询语句和扩展方法。

查询语句(Query Syntax)是一种类似 SQL 的语法,使用关键字 from、where、orderby、select 等来构建查询语句。例如,查询一个整数集合中大于 10 的所有元素:

List<int> numbers = new List<int> { 2, 5, 10, 15, 20 };
var result = from n in numbers
             where n > 10
             select n;
foreach (var item in result)
{
    Console.WriteLine(item);
}

扩展方法(Method Syntax)是一种面向对象的链式方法调用方式,它使用 LINQ 扩展方法来对数据源进行操作,例如,同样查询一个整数集合中大于 10 的所有元素:

List<int> numbers = new List<int> { 2, 5, 10, 15, 20 };
var result = numbers.Where(n => n > 10);
foreach (var item in result)
{
    Console.WriteLine(item);
}

两种方式本质上是等价的,都可以实现相同的查询功能,只是语法不同。查询语句更加直观易懂,适合初学者和简单的查询场景;扩展方法更加灵活,可以完成更复杂的查询操作,适合高级用户和复杂的查询场景。

LINQ 提供了很多查询方法,例如:Where、OrderBy、Select、Join、GroupBy 等,这些方法可以对数据源进行过滤、排序、投影、连接、分组等操作。以下是一些常用的 LINQ 方法:

  • Where:用于根据指定条件过滤数据源,返回符合条件的元素集合。
  • OrderBy、OrderByDescending:用于根据指定条件对数据源进行排序,返回排序后的元素集合。
  • Select、SelectMany:用于对数据源进行投影操作,返回一个新的集合。
  • Join、GroupJoin:用于根据指定条件连接两个数据源,返回连接后的元素集合。
  • GroupBy:用于将数据源按照指定条件进行分组,返回分组后的元素集合。

以下是一个使用 LINQ 查询语句和方法对学生信息进行查询的例子:

class Student
{
    public int Id { get; set; }
    public string Name { get; set; }
    public int Age { get; set; }
    public string Gender { get; set; }
}

List<Student> students = new List<Student>
{
    new Student{ Id=1, Name="Tom", Age=18},
    new Student{ Id=2, Name="Jerry", Age=20},
    new Student{ Id=3, Name="Kate", Age=22},
    new Student{ Id=4, Name="Lucy", Age=20},
    new Student{ Id=5, Name="Mary", Age=18},
};

var query = students.Where(s => s.Age == 20);
foreach (var student in query)
{
    Console.WriteLine(student.Name);
}

输出结果为:

Jerry
Lucy

其中,LINQ 查询语句 Where 用于筛选符合条件的元素,该语句使用 Lambda 表达式作为筛选条件。上述代码使用 Lambda 表达式 s => s.Age == 20 来筛选年龄为 20 岁的学生。方法 Where 返回的是一个 IEnumerable<Student> 对象,其中包含符合条件的元素。

最后,使用 foreach 遍历符合条件的学生,并输出学生的姓名。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

無限進步的全棧遊戲開發

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值