如果我填充了所有四个字符串,我有以下代码正确返回.但是,如果其中一个字符串为空,则返回的列表为空.基本上,我需要它返回一个列表,即使一个或多个甚至所有字符串都是空的.
private List<Search> FilterSearchResults(List<Search> results)
{
string _dataType = cmbISDataType.SelectedItem.ToString();
string _medium = cmbISMedium.SelectedItem.ToString();
string _pStatus = cmbISPStatus.SelectedItem.ToString();
string _rStatus= cmbISRStatus.SelectedItem.ToString();
return results
.Where(a => a.Data_Type == _dataType && !string.IsNullOrWhiteSpace(_dataType))
.Where(b => b.Medium == _medium && !string.IsNullOrWhiteSpace(_medium))
.Where(c => c.PStat== _pStatus && !string.IsNullOrWhiteSpace(_pStatus ))
.Where(d => d.RStatus== _rStatus && !string.IsNullOrWhiteSpace(_rStatus))
.ToList();
}
Run Code Online (Sandbox Code Playgroud)
提前致谢.
您当前的条件指定任何字符串不能为空或空,这就是列表返回为空的原因.Linq中的where子句通过返回集合中满足指定条件的任何对象来工作.如果您要简单地指定条件:
results.Where(true);
Run Code Online (Sandbox Code Playgroud)
将返回所有对象.
对于null或空检查,使用OR而不是AND将返回列表中对任一条件计算为true的任何对象.因此,如果过滤器字符串为空,则将返回所有对象,否则将仅返回满足其他条件的对象.
将您的过滤器更新为:
return results
.Where(a => a.Data_Type == _dataType || string.IsNullOrWhiteSpace(_dataType))
.Where(b => b.Medium == _medium || string.IsNullOrWhiteSpace(_medium))
.Where(c => c.PStat== _pStatus || string.IsNullOrWhiteSpace(_pStatus ))
.Where(d => d.RStatus== _rStatus || string.IsNullOrWhiteSpace(_rStatus))
.ToList();
Run Code Online (Sandbox Code Playgroud)
而不是在循环的每次迭代中检查该值是否为null,仅在字符串不为null时执行检查:
private List<Search> FilterSearchResults(List<Search> results)
{
string _dataType = cmbISDataType.SelectedItem.ToString();
string _medium = cmbISMedium.SelectedItem.ToString();
string _pStatus = cmbISPStatus.SelectedItem.ToString();
string _rStatus = cmbISRStatus.SelectedItem.ToString();
IEnumerable<Search> query = results;
if (!string.IsNullOrWhiteSpace(_dataType))
query = query.Where(a => a.Data_Type == _dataType);
if (!string.IsNullOrWhiteSpace(_medium))
query = query.Where(b => b.Medium == _medium);
if( !string.IsNullOrWhiteSpace(_pStatus))
query = query.Where(c => c.PStat == _pStatus);
if( !string.IsNullOrWhiteSpace(_rStatus))
query = query.Where(d => d.RStatus == _rStatus);
return query.ToList();
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
3218 次 |
| 最近记录: |