如何使用Linq对Person列表按Id排序后按JoinedDate日期范围过滤
Linq实现代码与说明
首先请确保代码文件顶部引入Linq命名空间:
using System.Linq;按照「先按Id排序、再筛选日期范围」的需求,实现代码如下(示例起止日期可根据实际业务调整):
// 定义日期筛选边界 DateTime fromDate = new DateTime(2021, 1, 15); DateTime toDate = new DateTime(2021, 3, 15); // 方法链写法(推荐) List<Person> filteredPersons = persons .OrderBy(p => p.Id) // 按Id升序排序,如需降序请改用OrderByDescending方法 .Where(p => p.JoinedDate >= fromDate && p.JoinedDate <= toDate) // 包含起止日期边界,如需排除边界可调整运算符 .ToList();
- 如果你习惯用查询表达式写法,也可以用如下实现:
DateTime fromDate = new DateTime(2021, 1, 15); DateTime toDate = new DateTime(2021, 3, 15); var query = from p in persons orderby p.Id where p.JoinedDate >= fromDate && p.JoinedDate <= toDate select p; List<Person> filteredPersons = query.ToList();
- 性能优化提示:
如果业务没有强制要求排序必须在筛选前执行,建议调整为「先筛选再排序」的顺序,数据量大时可以减少排序的元素数量,大幅提升执行效率,示例如下:
List<Person> filteredPersons = persons .Where(p => p.JoinedDate >= fromDate && p.JoinedDate <= toDate) .OrderBy(p => p.Id) .ToList();
内容的提问来源于stack exchange,提问作者dragon123
相关产品推荐
相关产品推荐

