简体   繁体   English

基于多个条件通过 linq 过滤收集

[英]Filter collection via linq based on multiple criteria

I have collection that i want to filter based on multiple criteria .我有我想根据multiple criteria过滤的集合。

That's my filter class:那是我的过滤器类:

class CriteriaClass {
    public DertEnum? DertEnum { get; set; }
    public string UserName { get; set; }
    
    CriteriaClass() {
        DertEnum = null;
        UserName = string.Empty;
    }
}

My question is how to say here that if criteriaClass.DertEnum is null not to include it in linq filter.我的问题是如何在这里说如果criteriaClass.DertEnum为 null 则不将其包含在 linq 过滤器中。 Same for criteriaClass.UserName if it's empty .同为criteriaClass.UserName如果它是empty How to use to not go into if/else.如何使用不进入if/else. I am sure there is a way.我确定有办法。

_data = new ObservableCollection<MyModel>(_data.Where(w =>
    (w.DertEnum.Equals(EnumTools.T(criteriaClass.WarehouseActionTypeEnum)))
    && (w.UserName.Equals(criteriaClass.UserName))));

To check if something is not null , you can use is object .要检查某些内容是否不为null ,您可以使用is object To check if a string is null or empty, you can use String.IsNullOrEmpty() :要检查字符串是 null 还是空,您可以使用String.IsNullOrEmpty()

_data = new ObservableCollection<MyModel>(_data.Where(w => w.DertEnum is object
                                                           && !String.IsNullOrEmpty(w.UserName)
                                                           && (<your other criterias go there>)))

Add a logical or is null check to the where criteria:向 where 条件添加逻辑或为空检查:

_data = new ObservableCollection<MyModel>(_data.Where(w =>
    ((w.DertEnum is null || w.DertEnum.Equals(EnumTools.T(criteriaClass.WarehouseActionTypeEnum))))
    && (w.UserName.Equals(criteriaClass.UserName))));

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM