LINQ 过滤与选择操作详解
1. 过滤操作
在数据处理中,过滤操作是常见需求,LINQ 提供了多种过滤运算符。
- Where 运算符 :这是最基础的过滤运算符,它接收一个谓词函数,该函数接受单个元素并返回布尔值。只有谓词函数返回 true 的元素才会被包含在结果中。例如:
IEnumerable<Course> q = Course.Catalog.Where(
(course, index) => (index % 2 == 0) && course.Duration >= 3);
- 这里的 `Course.Catalog` 是课程目录,`(course, index)` 是一个带有索引的过滤 lambda 表达式,用于排除每隔一个的元素,并丢弃时长小于三小时的课程。
- 需要注意的是,索引过滤仅对有序数据有意义。LINQ to Objects 总是能正常工作,因为它使用 `IEnumerable<T>` 按顺序生成元素,但并非所有 LINQ 提供程序都按顺序处理元素。例如,EF Core 会将 C# 中的 LINQ 查询转换为数据库查询,除非查询明确要求特定顺序,否则数据库可以自由选择处理元素的顺序,甚至可能并行处理。因此,使用 EF Core 执行类似上述的索引过滤查询会引发异常。
- 此外,LINQ 提供程序对过滤 lambda 表达式的处理有所不同。LINQ to Objects 允许在过滤 lambda 中调用任何方法,而数据库的
超级会员免费看
订阅专栏 解锁全文
35

被折叠的 条评论
为什么被折叠?



