如何使用Linq过滤

时间:2013-01-22 13:31:47

标签: .net linq

我的日志类有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()方法。

修改

有人对如何克服这个问题有任何建议吗?我的目标是拥有一个仅列出失败的列表。

1 个答案:

答案 0 :(得分:2)

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

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

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

这是Demo