如何筛选LoginDate为当日且子列表仅含LoginPurpose为Update的ModelLogin列表
筛选逻辑实现
实现步骤
- 第一层过滤:筛选所有
ModelLogin实例中LoginDate等于dateTimeToday的项 - 第二层过滤:对通过第一层过滤的每个实例,保留其
LoginRecords子列表中LoginPurpose取值为Update的子项
代码实现(C#)
首先需要引入Linq命名空间:
using System.Linq;
方式1:生成新的结果列表(不修改原始数据,推荐)
var filteredLoginList = listLogins // 过滤今日登录的外层记录 .Where(login => login.LoginDate == dateTimeToday) // 对每条符合条件的外层记录,过滤子列表 .Select(login => new ModelLogin( login.LoginDate, login.LoginRecords.Where(record => record.LoginPurpose == "Update").ToList() )) .ToList();
方式2:直接修改原始列表和对象(会改动原有数据)
// 先删除非今日的外层记录 listLogins.RemoveAll(login => login.LoginDate != dateTimeToday); // 遍历剩余记录,删除不符合要求的子项 foreach (var login in listLogins) { login.LoginRecords.RemoveAll(record => record.LoginPurpose != "Update"); }
注意事项
如果LoginDate字段包含时分秒信息,仅需要匹配日期部分时,将判断条件修改为login.LoginDate.Date == dateTimeToday.Date即可。
样例执行结果
使用提供的测试数据执行后,最终得到的列表仅包含1条ModelLogin记录,其LoginRecords子列表仅保留Alex、David两条LoginPurpose为Update的记录,符合筛选要求。
内容的提问来源于stack exchange,提问作者Alexander Raymak
相关产品推荐
相关产品推荐

