Как использовать. Содержит с Int DataType - PullRequest
0 голосов
/ 03 мая 2018

Приведенный ниже код является частью кода функции поиска, который извлекает строку запроса из URL и выполняет поиск в базе данных.

Все прекрасно работает, кроме одной вещи, которая BatchID. Который выдает ниже сообщение об ошибке. BatchID - это DataType Int в базе данных. По этой причине это вызывает ошибку. Я пробовал кастовать как (string) однако не повезло

Сообщение об ошибке

Код серьезности Описание Строка файла проекта Ошибка CS1061 'int' делает не содержит определения для «Contains» и метода расширения «Содержит», принимающий первый аргумент типа «int», может быть найден (Вы пропустили директиву использования или сборку? ссылка?) CardDistro E: \ wwwroot \ CardDistro \ CardDistro \ Controllers \ CardsController.cs 32

QueriedTransactionList = db.Transactions
                           .Where(x => x.Card.InCome.InComePayerName.Contains(QueryString) || 
                                       x.Card.InCome.InComePayerEmail.Contains(QueryString) ||
                                       x.Card.InCome.InComePayerTIN.Contains(QueryString) ||
                                       x.BatchID.Contains( (string) QueryString) //Error over here || 
                                       x.Card.Port.PortName.Contains(QueryString)
                                  )
                           .OrderByDescending(x => x.TTransactionID)
                           .GroupBy(x => x.BatchID)
                           .Select(x => x.FirstOrDefault())
                           .ToList();

1 Ответ

0 голосов
/ 03 мая 2018

Если свойство BatchID имеет тип int, вы не можете использовать Contains, так как оно работает с массивом. Вы можете проверить значение напрямую, используя оператор ==.

Поскольку вы используете тот же параметр string (QueryString), чтобы также получить значение идентификатора, вы должны использовать метод TryParse для безопасного анализа строки в значении переменной int (, если оно является допустимым строковым представлением значения int ) и используйте его. Если ваше значение BatchID всегда больше, чем 0, вы можете инициализировать локальную переменную равной 0, и если строка запроса имеет допустимое числовое значение, проанализируйте ее и обновите локальную переменную и используйте ее в выражении LINQ.

int id = 0;
if (Int32.TryParse(QueryString, out id))
{
}
var results = db.Transactions
                 .Where(x => x.Card.InCome.InComePayerName.Contains(QueryString) || 
                             x.Card.InCome.InComePayerEmail.Contains(QueryString) ||
                             x.Card.InCome.InComePayerTIN.Contains(QueryString) ||
                             x.Card.Port.PortName.Contains(QueryString) ||
                             x.BatchID == id   
                       )
                       .OrderByDescending(x => x.TTransactionID)
                       .GroupBy(x => x.BatchID)
                       .Select(x => x.FirstOrDefault())
                       .ToList();
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...