Я использую LINQ для извлечения записей из базы данных. Все работает нормально, за исключением того, что мне нужно применить разные фильтры в одном запросе. Если параметры не равны нулю и больше нуля, тогда применяются фильтры. В противном случае, если они равны нулю или нулю, не применяйте фильтры. Ниже приведен пример:
bankId(int) and accountNumber(string) are my two parameters.
if bankId > 0 then get the records matching the bankId, if accountnumber is passed then get the records matching the accountnumber.
If both are passed pull all the records matching with bankid and accountnumber.
If both are not passed then return all records without applying filter.
В настоящее время я могу добиться этого следующим образом: без применения какого-либо фильтра я извлекаю все записи, а затем, если передается bankId, применяя фильтр к вышеуказанному результату, и если номер счета передается снова, применяя фильтр к вышеуказанному результату.
Но проблема здесь в том, что этот подход приводит к множеству условий if, которых я не хочу.
Есть ли лучший и простой способ применить эти фильтры в одном запросе и получить результат?
Пожалуйста, предложите, спасибо заранее.
2 ответа
Строить свое заявление таким образом
var items = context.accounts.AsQueryable();
if (bankId > 0)
{
items = items.Where(x => x.bankId == bankId);
}
if (!string.IsNullOrEmpty(accountnumber))
{
items = items.Where(x => x.accountnumber == accountnumber);
}
var result = items.ToList(); // query db / materialize here!
Вы можете отправить функцию в условие и отфильтровать ее, как показано ниже.
List items = getItemsAslist();
Func<item, bool> filterAccounts = (i) =>
{
return (bankId > 0 ? i.bankId == bankId : true)
&& (!string.IsNullOrEmpty(accountnumber) ? accountNumber == i.accountNumber : true)
};
items = items.Where(filterAccounts);
Похожие вопросы
Новые вопросы
c#
C # (произносится как «резкий») - это высокоуровневый, статически типизированный язык программирования с несколькими парадигмами, разработанный Microsoft. Код C # обычно нацелен на семейство инструментов и сред выполнения Microsoft .NET, включая, среди прочего, .NET Framework, .NET Core и Xamarin. Используйте этот тег для вопросов о коде, написанном на C # или в формальной спецификации C #.
query=query.Where(...)
, чтобы добавить еще одно условиеWHERE
, эффективно объединив их.Where
. Важно: не выполняйте запрос вif
, например, сToList
.leading to multiple if conditions which I don't want.
что это значит? Как выглядит ваш код? Вы можете заменить несколькоif
выражением переключения. С другой стороны, здесь нужны только дваif