如何使用LINQ查询获取基于日期唯一且优先级最高的对象
解决方案:用LINQ(含MoreLinq)筛选每个日期的最高优先级对象
当然可以用LINQ优雅实现这个需求,结合你已经安装的MoreLinq还能写出更简洁的代码!下面给你两种可行的写法:
1. 原生LINQ写法(无需MoreLinq)
核心思路是先按日期分组,再从每组中选出优先级最高(数值最小)的对象:
var filteredList = dayResponses // 按日期分组,如果你的DateTime包含时间部分,记得用.Date来忽略时间差异 .GroupBy(response => response.Date.Date) // 每组内按优先级升序排序(1为最高优先级),取第一个就是该日期的最优对象 .Select(group => group.OrderBy(item => item.Priority).First()) .ToList();
2. 结合MoreLinq的DistinctBy写法(更简洁)
利用DistinctBy的去重特性,先把所有对象按优先级排序,再按日期去重保留第一个出现的(也就是优先级最高的):
var filteredList = dayResponses // 先按优先级升序排列,让每个日期的最高优先级对象排在最前面 .OrderBy(response => response.Priority) // 按日期去重,只保留每个日期第一次出现的对象 .DistinctBy(response => response.Date.Date) .ToList();
注意事项
- 如果你的
Date属性包含具体时间(比如2024-05-20 14:30:00),一定要用response.Date.Date来分组/去重,否则同一日期但不同时间的对象会被当成不同组处理。 - 如果同一日期存在多个优先级相同的最高优先级对象,两种写法都会保留列表中最先出现的那个对象。
内容的提问来源于stack exchange,提问作者Hyzac
相关产品推荐
相关产品推荐

