我有要基于multiple criteria
进行过滤的收藏集。
那是我的过滤器类:
class CriteriaClass {
public DertEnum? DertEnum { get; set; }
public string UserName { get; set; }
CriteriaClass() {
DertEnum = null;
UserName = string.Empty;
}
}
我的问题是在这里怎么说?如果criteriaClass.DertEnum
为null,则不将其包括在linq过滤器中。如果是criteriaClass.UserName
,则与empty
相同。我敢肯定,有一种方法可以避免进入if/else.
。
_data = new ObservableCollection<MyModel>(_data.Where(w =>
(w.DertEnum.Equals(EnumTools.T(criteriaClass.WarehouseActionTypeEnum)))
&& (w.UserName.Equals(criteriaClass.UserName))));
答案 0 :(得分:1)
要检查某项是否不是null
,可以使用is object
。要检查字符串是否为空或空,可以使用String.IsNullOrEmpty()
:
_data = new ObservableCollection<MyModel>(_data.Where(w => w.DertEnum is object
&& !String.IsNullOrEmpty(w.UserName)
&& (<your other criterias go there>)))
答案 1 :(得分:1)
将逻辑或null检查添加到where条件:
_data = new ObservableCollection<MyModel>(_data.Where(w =>
((w.DertEnum is null || w.DertEnum.Equals(EnumTools.T(criteriaClass.WarehouseActionTypeEnum))))
&& (w.UserName.Equals(criteriaClass.UserName))));