Как я могу создать накопительный фильтр с помощью LINQ?

#c# #asp.net #linq

#c# #asp.net #linq

Вопрос:

Это мой метод, я фильтрую только по одному, мне нужно, чтобы они были накопительными

 private IQueryable<PublicationModel> FilterByTreatmentStatus(IQueryable<PublicationModel> selectedData, int? filterTreatmentOption)
        {
            if (filterTreatmentOption.HasValue)
            {
                switch (filterTreatmentOption)
                {
                    case (int)PublicationTreatStatus.NotTreated:
                        return selectedData.Where(x => x.PublicationStatus == 0);
                    case (int)PublicationTreatStatus.Treated:
                        return selectedData.Where(x => x.PublicationStatus == 1);
                    case (int)PublicationTreatStatus.TreatedWithoutProvidence:
                        return selectedData.Where(x => x.PublicationStatus == 2);
                    default:
                        return selectedData;
                }
            }

            return selectedData;
        }
 

Ответ №1:

Вот так — работайте с флагами, чтобы ваше перечисление могло содержать несколько значений

 [Flags]
public enum FilterTreatmentOption
{
    NotTreated = 1,
    Treated = 2,
    TreatedWithoutProvidence = 4
}


private IQueryable<PublicationModel> FilterByTreatmentStatus(IQueryable<PublicationModel> selectedData, FilterTreatmentOption filterTreatmentOption)
{
    if (filterTreatmentOption.HasFlag(PublicationTreatStatus.NotTreated))
        selectedData = selectedData.Where(x => x.PublicationStatus == 0);
    if (filterTreatmentOption.HasFlag(PublicationTreatStatus.Treated))
        selectedData = selectedData.Where(x => x.PublicationStatus == 1);
    if (filterTreatmentOption.HasFlag(PublicationTreatStatus.TreatedWithoutProvidence))
        selectedData = selectedData.Where(x => x.PublicationStatus == 2);
    return selectedData;
}