如何用Lambda表达式筛选日期在指定列表中的列表项
修正后的Lambda表达式实现筛选需求
需求说明
从myObject集合中筛选满足以下条件的项:
- 对象的
xUserId属性等于指定的userId - 对象的
Date属性存在于dates列表中
修正后的完整代码
var response = myObject .Where(x => x.xUserId == userId && dates.Contains(x.Date)) .Select(x => new { x.Id, x.Quantity, x.Date }) .OrderBy(x => x.Id) .ToList();
关键修正点
- 修正属性引用:原代码里的
xUserId应该是x.xUserId,要明确访问集合中每个对象的xUserId属性 - 日期匹配逻辑:用
dates.Contains(x.Date)直接检查x.Date是否在目标日期列表中,这是集合存在性判断的标准写法 - 修复语法错误:补全了
Where方法的闭合括号,解决原代码的语法问题
额外补充:日期精度处理(可选)
如果dates里的日期仅保留年月日部分,而x.Date包含时分秒信息,需要统一精度后再判断,避免因为时分秒差异导致匹配失败:
// 方法1:使用DateOnly(.NET 6及以上版本支持) var dateOnlyList = dates.Select(d => DateOnly.FromDateTime(d)).ToList(); var response = myObject .Where(x => x.xUserId == userId && dateOnlyList.Contains(DateOnly.FromDateTime(x.Date))) .Select(x => new { x.Id, x.Quantity, x.Date }) .OrderBy(x => x.Id) .ToList(); // 方法2:截取Date部分比较 var response = myObject .Where(x => x.xUserId == userId && dates.Any(d => d.Date == x.Date.Date)) .Select(x => new { x.Id, x.Quantity, x.Date }) .OrderBy(x => x.Id) .ToList();
内容的提问来源于stack exchange,提问作者imj
相关产品推荐
相关产品推荐

