My Log 类有 2 个属性。
List<LogDetails>
string Title
我的 LogDetails 类有 2 个属性:
string Message
LogStatus LogStatus //enum
在此对象生命周期内,它接收许多消息,这些消息被存储起来以供稍后记录。LogStatus 枚举有一些状态,但只是"正在进行"、"找不到文件错误"、"成功"或"失败"。
我正在尝试使用 Linq 仅匹配那些失败的,但我无法构建新类型。
List<Log> filteredLogs = (from a in logs
from b in a.LogDetailsList
where b.Status == LogDetails.LogStatus.Failed
select new Log()
{
Title = a.Title,
LogDetailsList = a.LogDetailsList
}).Distinct().ToList();
我的filteredLogs向我返回完整列表,就好像where子句不起作用一样。
我试过了
List<Log> filteredLogs = (from a in logs
from b in a.LogDetailsList
where b.Status == LogDetails.LogStatus.Failed
select new Log()
{
Title = a.Title,
LogDetailsList = new LogDetails() { Message = b.Message, Status = b.Status }
}).Distinct().ToList();
这也不起作用,因为看起来我无法从 Linq 查询中调用 ToList() 方法。
编辑
有没有人对如何克服这个问题有任何建议?我的目标是有一个列表,只列出那些失败的。
"嵌套"LogDetails
列表中使用Enumerable.Any
。
List<Log> failedLogs = logs
.Where(l => l.LogDetails.Any(ld => ld.LogStatus==LogStatus.Failed))
.ToList();
这将返回至少有一个日志详细信息LogStatus.Failed
的所有日志。
这是一个演示。