#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;
}