C#怎么使用LINQ查询 C# LINQ to Objects查询方法

2次阅读

linq to Objects 是 C# 中用于查询内存集合的核心技术,支持查询表达式和方法语法两种等效形式,提供 Where、select、OrderBy、GroupBy 等常用操作,具有延迟执行特性,需用 ToList() 等触发实际执行。

C#怎么使用LINQ查询 C# LINQ to Objects查询方法

在C#中,LINQ(Language Integrated Query)让查询内存中的集合(如数组、List、Dictionary等)变得简洁直观。LINQ to Objects 是 LINQ 最基础、最常用的场景,它直接操作实现了 IEnumerable<t></t> 的集合。

基础语法:查询表达式 vs 方法语法

LINQ 提供两种等效写法:

  • 查询表达式语法(类似 sql,更易读):
    var result = from item in list
                                  where item.Age > 18
                                  select item.Name;
  • 方法语法(链式调用,更灵活,支持所有操作):
    var result = list.Where(x => x.Age > 18).Select(x => x.Name);

编译器会把查询表达式自动转换为对应的方法调用,两者本质相同。初学建议从查询表达式入手,进阶推荐熟练掌握方法语法。

常用查询操作方法(方法语法)

这些是 System.Linq 命名空间中定义的扩展方法,适用于任何 IEnumerable<t></t>

C#怎么使用LINQ查询 C# LINQ to Objects查询方法

Mistral AI

Mistral ai被称为“欧洲版的OpenAI”,也是目前欧洲最强的 LLM 大模型平台

C#怎么使用LINQ查询 C# LINQ to Objects查询方法 182

查看详情 C#怎么使用LINQ查询 C# LINQ to Objects查询方法

  • Where:筛选符合条件的元素
    list.Where(x => x.IsActive)
  • Select:投影转换(如取属性、构造新对象
    list.Select(x => new { x.Id, x.FullName })
  • OrderBy / ThenBy:升序排序,ThenBy 用于后续多级排序
    list.OrderBy(x => x.Department).ThenBy(x => x.Salary)
  • GroupBy:按键分组
    list.GroupBy(x => x.Category)
  • FirstOrDefault / First / SingleOrDefault:获取单个元素,注意异常与默认值区别
    list.FirstOrDefault(x => x.Id == 100)
  • Any / All / Contains:判断存在性或满足条件
    list.Any(x => x.Name.StartsWith(“A”))

延迟执行与立即执行的区别

大多数 LINQ 方法(如 WhereSelectOrderBy)返回的是 IEnumerable<t></t>,**不真正执行查询**,只是构建查询表达式——这叫“延迟执行”。真正执行发生在:

  • 遍历结果(foreach
  • 调用立即执行方法,例如:
    ToList()、ToArray()、count()、Sum()、First()、Single()、ElementAt()

⚠️ 注意:多次调用延迟查询会重复执行逻辑(比如读文件、计算),如需复用结果,应先用 ToList() 等缓存。

实用小技巧和注意事项

  • 别忘了加 using System.Linq;
  • 空集合调用 WhereSelect 不报错,返回空 IEnumerable
  • FirstOrDefault() 返回 NULL引用类型)或默认值(值类型),比 First() 更安全
  • 复杂条件可提取到变量或方法中提升可读性:
    Func isAdult = p => p.Age >= 18;
    var adults = list.Where(isAdult);
  • 结合 let(查询表达式)或中间变量(方法语法)简化嵌套逻辑

基本上就这些。LINQ to Objects 核心就是围绕 IEnumerable<t></t> 的一系列函数式操作,写熟了会让集合处理代码更清晰、更少出错。

text=ZqhQzanResources