Запрос необязательных параметров Linq - PullRequest
0 голосов
/ 11 февраля 2020

Я создаю форму поиска, которая запрашивает мою базу данных, чтобы показать результаты, основанные на том, что было заполнено в форме. Единственное обязательное поле - это дата, когда я работаю. все остальные поля являются необязательными, если необязательное поле не заполнено, оно не должно быть частью запроса. Это код, который я написал:

            var queryable = context.TransactionJournal.Where(s => s.TransactionDateTime <= transactionDate)
                .Where(s => Region == null || Region == s.AcquirerID)
                .Where(s => MCC == null || MCC == s.MerchantCategoryCode)
                .Where(s => MerchantID == null || MerchantID.Contains(s.MerchantID))
                .Where(s => TxnCurrency == null || TxnCurrency.Contains(s.Currency))
                .Where(s => TerminalID == null || TerminalID.Contains(s.TerminalID))
                .Where(s => TxnAmount.ToString() == null || TxnAmount==(s.TransactionAmount))
                .Where(s => BIN == null || BIN.Contains(s.Bin))
                .Where(s => MsgType == null || MsgType.Contains(s.MessageType))
                .Where(s => MaskedPan == null || MaskedPan.Contains(s.PANM))
                .Where(s => ProcessingCode == null || ProcessingCode.Contains(s.ProcessingCode))
                .Where(s => ClearPan == null || ClearPan.Contains(s.PAN))
                .Where(s => ResponseCode == null || ResponseCode.Contains(s.ResponseCode))
                .Where(s => AuthorizationCode == null || AuthorizationCode.Contains(s.AuthorizationCode))
                .Where(s => EntryMode == null || EntryMode.Contains(s.PosEntryMode))
                .AsQueryable();

К сожалению, он работает неправильно. Может кто-нибудь сказать мне, что мне не хватает или есть лучший способ написать это?

Ответы [ 2 ]

0 голосов
/ 11 февраля 2020

Я думаю, что лучшее, что вы можете сделать, - это сначала проверить, следует ли применить условие, а затем отфильтровать список.

Пример с использованием предоставленного вами кода.

             var queryable = context.TransactionJournal.Where(s => s.TransactionDateTime <= transactionDate);

             if (!string.IsNullOrEmpty(your_objet.Region) 
             {
                var queryable = queryable.Where(x=>x.Region == your_objet.Region).AsQueryable();
             }

             if (!string.IsNullOrEmpty(your_objet.MCC) 
             {
                var queryable = queryable.Where(x=>x.MCC == your_objet.MCC).AsQueryable();
             }

Первая строка - это весь список, затем вы проверяете все параметры, которые у вас есть в форме, и оцениваете их, если значение имеет значение, примените фильтр к списку.

И в конце вы отфильтруете свой список.

0 голосов
/ 11 февраля 2020

Прислушивался к комментариям, просматривал каждую строку и обнаруживал, какая строка оценивается как ложная. Это исправило мою проблему.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...