Я создаю раздел приложения, который вращается вокруг извлечения информации о транзакциях из базы данных. Из-за характера данных в таблице есть много столбцов, по которым я хочу фильтровать. У меня есть поле выбора фильтра с 15 полями, которое я хочу иметь возможность создать предложение where для оператора LINQ. Интересная часть приходит, когда я хочу, чтобы определенные поля были нулевыми. Например, я хочу иметь возможность фильтрации по любому или всем из:
- Тип транзакции
- Код ответа
- Сумма сделки
- Многие другие
Я могу создать предикат, который выглядит как
Func<Transaction, bool> pred = t => t.ResponseCode == ResponseCode && t.TransactionType == TransactionType && t.TransactionAmount > 100.00;
Но чтобы иметь возможность выбирать, какие поля включать в предикат, я объединяю предикаты вместе:
Func<Transaction, bool> pred = t => true;
if(ResponseCode != null)
pred.AndAlso(t => t.ResponseCode == ResponseCode);
// Rinse and repeat
А затем передать этот предикат предложению where оператора LINQ.
Это работает именно так, как я хочу, но довольно сложно. Есть ли другие способы сделать это?
UPDATE:
Спасибо правосудию за комментарии. Я не использую LINQ to SQL, я использую LINQ для коллекции объектов из хранилища. Как бы вы программно построили фильтр Expression?