0

我的 Log 类有 2 个属性。

List<LogDetails>
string Title

我的 LogDetails 类有 2 个属性:

string Message
LogStatus LogStatus  //enum

在这个对象的生命周期中,它接收到许多消息,这些消息被存储起来以供以后记录。LogStatus Enum 有几个状态,但简单来说就是“进行中”、“未找到文件错误”、“成功”或“失败”。

我正在尝试使用 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() 方法。

编辑

有没有人对如何克服这个问题有任何建议?我的目标是有一个只列出那些失败的列表。

4

1 回答 1

2

Enumerable.Any在您的“嵌套”LogDetails列表中使用。

List<Log> failedLogs = logs
            .Where(l => l.LogDetails.Any(ld => ld.LogStatus==LogStatus.Failed))
            .ToList();

这将返回至少一个日志详细信息具有的所有日志LogStatus.Failed

这是一个演示

于 2013-01-22T13:36:40.740 回答