gpt4 book ai didi

c# - LINQ 查询中的三元运算符未按预期工作

转载 作者:行者123 更新时间:2023-11-30 19:09:07 25 4
gpt4 key购买 nike

我正在尝试根据某些条件过滤对象列表。我看到一些帖子在他们的 LINQ 查询中使用三元运算符来完成此任务。

此代码片段的底部是我的 LINQ 查询。我希望它测试每个 where,而它似乎只尝试第一个 where 并留下其余部分。 List 不包含我期望的数据。我做错了什么?

    private ObservableCollection<LogEvent> m_LogEvents = ApplicationData.MainLogEntries.LogEvents;
public ObservableCollection<LogEvent> LogEvents
{
get { return m_LogEvents; }
set { m_LogEvents = value; RaisePropertyChanged("LogEvents"); }
}

private bool m_ViewDebugLogs = false;
public bool ViewDebugLogs
{
get { return m_ViewDebugLogs; }
set { m_ViewDebugLogs = value; RaisePropertyChanged("ViewDebugLogs"); FilterList(); }
}

private bool m_ViewErrorLogs = true;
public bool ViewErrorLogs
{
get { return m_ViewErrorLogs; }
set { m_ViewErrorLogs = value; RaisePropertyChanged("ViewErrorLogs"); FilterList(); }
}

private bool m_ViewInfoLogs = true;
public bool ViewInfoLogs
{
get { return m_ViewInfoLogs; }
set { m_ViewInfoLogs = value; RaisePropertyChanged("ViewInfoLogs"); FilterList(); }
}

private void FilterList()
{
List<LogEvent> selectedEvents = (from x in LogEvents
where (ViewDebugLogs) ? x.Level == "Debug" : false
where (ViewErrorLogs) ? x.Level == "Error" : false
where (ViewInfoLogs) ? x.Level == "Info" : false
select x).ToList();

}

编辑:此操作的目标是启用适当的 bool ViewDebugLogsViewErrorLogsViewInfoLogs 或三者的任意组合日志按适当的类型过滤。

我已经从答案中尝试了以下但没有成功:

这只获取调试日志:

            List<LogEvent> selectedEvents = (from x in LogEvents
where (ViewDebugLogs == true) ? x.Level == "Debug" : false
|| (ViewErrorLogs == true) ? x.Level == "Error" : false
|| (ViewInfoLogs == true) ? x.Level == "Info" : false
select x).ToList();

这只获取调试日志:

            List<LogEvent> selectedEvents = (from x in LogEvents
where (ViewDebugLogs == true) ? x.Level == "Debug" : true
|| (ViewErrorLogs == true) ? x.Level == "Error" : true
|| (ViewInfoLogs == true) ? x.Level == "Info" : true
select x).ToList();

这什么也得不到:

            List<LogEvent> selectedEvents = (from x in LogEvents
where (ViewDebugLogs == true) ? x.Level == "Debug" : true
where (ViewErrorLogs == true) ? x.Level == "Error" : true
where (ViewInfoLogs == true) ? x.Level == "Info" : true
select x).ToList();

最佳答案

多个 where 条件连接在一起,就像您使用 AND 一样。如果您尝试执行 OR,则应改用 ||

List<LogEvent> selectedEvents = (from x in LogEvents
where (ViewDebugLogs) ? x.Level == "Debug" : false
|| (ViewErrorLogs) ? x.Level == "Error" : false
|| (ViewInfoLogs) ? x.Level == "Info" : false
select x).ToList();

关于c# - LINQ 查询中的三元运算符未按预期工作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33141509/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com