如何使用LINQ排除1月、2月并筛选指定number值的数据
解决LINQ查询排除1、2月记录的问题
你之前的思路明显走偏了——用Min(x => x.workshopDate.Month)拿到最小月份(也就是1月)后,反而筛选了1月的记录,这和你要排除1、2月的需求完全相反。咱们直接调整筛选逻辑就能搞定:
正确的实现代码
List<Vehiculos> ob = JsonConvert.DeserializeObject<List<Vehiculos>>(response.Content); // 第一步:先过滤掉1月和2月的记录,只保留3月及以后的数据 var filteredVehicles = ob.Where(o => o.workshopDate.Month >= 3).ToList(); // 注意处理筛选后无数据的情况,避免调用Max时抛出异常 if (filteredVehicles.Any()) { var m = filteredVehicles.Max(x => x.number); Num = m; // 绑定符合条件的记录:number最大且月份在3月及以后 dataGridView5.DataSource = filteredVehicles.Where(o => o.number == m) .OrderByDescending(o => o.number) .ToList(); } else { // 没有符合条件的数据时,清空数据源并设置默认值 dataGridView5.DataSource = null; Num = 0; // 也可以根据业务需求设置其他默认值 }
逻辑说明
- 精准过滤月份:直接用
o.workshopDate.Month >= 3排除1、2月的记录,确保后续操作只针对3月及以后的有效数据。 - 空值保护:添加
filteredVehicles.Any()判断,防止筛选后没有数据时调用Max方法抛出异常。 - 聚焦目标记录:在过滤后的数据集里找最大的
number,再筛选出对应记录绑定到DataGridView,完全匹配你要的结果。
内容的提问来源于stack exchange,提问作者Esteban Giraldo
相关产品推荐
相关产品推荐

