Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/.net/25.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
.net 如何使用Linq进行过滤_.net_Linq - Fatal编程技术网

.net 如何使用Linq进行过滤

.net 如何使用Linq进行过滤,.net,linq,.net,Linq,我的日志类有两个属性 List<LogDetails> string Title 在这个对象生命周期内,它接收到许多消息,这些消息被存储起来以便在以后的阶段进行日志记录。LogStatus枚举有几个状态,但只是“正在进行”、“未找到文件错误”、“成功”或“失败” 我试图使用Linq只匹配那些失败的,但我无法构建新类型 List<Log> filteredLogs = (from a in logs from b in

我的日志类有两个属性

List<LogDetails>
string Title
在这个对象生命周期内,它接收到许多消息,这些消息被存储起来以便在以后的阶段进行日志记录。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();
List filteredLogs=(来自日志中的
来自a.LogDetailsList中的b
其中b.Status==LogDetails.LogStatus.Failed
选择新日志()
{
头衔,头衔,
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();
List filteredLogs=(来自日志中的
来自a.LogDetailsList中的b
其中b.Status==LogDetails.LogStatus.Failed
选择新日志()
{
头衔,头衔,
LogDetailsList=newlogdetails(){Message=b.Message,Status=b.Status}
}).Distinct().ToList();
这也不起作用,因为我似乎无法从Linq查询中调用ToList()方法

编辑


有人对如何克服这个问题有什么建议吗?我的目标是创建一个只列出失败的列表。

使用
可枚举。在“嵌套的”
LogDetails
列表上的任何

List<Log> failedLogs = logs
            .Where(l => l.LogDetails.Any(ld => ld.LogStatus==LogStatus.Failed))
            .ToList();
列出失败日志=日志
.Where(l=>l.LogDetails.Any(ld=>ld.LogStatus==LogStatus.Failed))
.ToList();
这将返回至少有一个日志详细信息具有
LogStatus.Failed
的所有日志


这里有一个问题。

你必须让它看起来这么简单吗!:)我以前没有使用过任何日志,因此我将进行研究。@DaveRook:上面的查询只重新运行那些具有一个或多个日志详细信息的日志,
LogStatus
LogStatus.Failed
。您正在查找所有详细信息都失败的日志吗?是的,请。我只关注那些失败的,没有别的。@DaveRook:添加了一个演示,向您展示它的工作原理。该演示有两个日志,但只有一个日志详细信息为
LogStatus=LogStatus.Failed
。是否只希望这些详细信息作为日志的属性?所以我的演示中没有三个细节,只有一个(失败的那个)?哦,我现在明白了!我很抱歉,蒂姆,你当然是对的上面,演示是惊人的,真的帮助它同步。对不起,我看不见树林了!非常感谢。
List<Log> failedLogs = logs
            .Where(l => l.LogDetails.Any(ld => ld.LogStatus==LogStatus.Failed))
            .ToList();