通过基于多个条件的linq进行过滤器收集

时间:2020-09-04 13:15:47

标签: c# linq

我有要基于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))));

2 个答案:

答案 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))));