Как проверить результаты в запросе перед выполнением агрегатной операции? - PullRequest
1 голос
/ 21 июня 2011

Я разрабатываю проект на ASP.NET MVC 3.

Я использую этот запрос в моем контроллере:

int batchSize = (int)db.ProductFormulation
         .Where(r => r.ProductID == p)
         .Min(r => r.Quantity);

Где p вводится пользователем.

Когда я запускаю свой проект и пользователь вводит значение p , которого нет в моей таблице, возникает ошибка.

Как я могу остановить эту ошибку, например, должно быть создано окно сообщения, в котором указано не существует записи для введенного вами значения , и мой проект должен выполняться непрерывно

Пожалуйста, предложите мне, что я должен сделать для этого. Заранее спасибо.

1 Ответ

6 голосов
/ 21 июня 2011

Вы получаете сообщение об ошибке, потому что Min работает над последовательностью без элементов.

В основном вы ищете MinOrDefault(), которого нет в инфраструктуре LINQ.

Этот ответ имеет хорошую реализацию того, как этого добиться.

В качестве альтернативы, если вы не хотите выполнять агрегированную операцию на стороне сервера, вы можете материализовать последовательностьсначала выполните мин:

int batchSize = 0;
var results = db.ProductFormulation.Where(r => r.ProductID == p).ToList();

if (results.Count > 0)
   batchSize = results.Min(x => x.Quantity);

Очевидно, что если у вас много записей, вышеприведенное не очень подходит, и вам лучше использовать вышеупомянутый метод расширения.

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