You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何使用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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.01 02:52:47