我想根據某些條件篩選對象列表。我見過一些在LINQ查詢中使用三元運算符的文章來完成這個任務。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();
}
編輯:這樣做的目的是,如果相應的布爾ViewDebugLogs
,ViewErrorLogs
,或ViewInfoLogs
,或三者的任意組合都啓用了日誌由相應的類型過濾。
我試着從沒有成功的答案如下:
這隻Debug Logs
獲得:
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();
這隻會變得Debug Logs
:
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's。謝謝! –