Как мне обработать никаких результатов, возвращаемых запросом LINQ? - PullRequest
0 голосов
/ 11 января 2011

Следующий запрос LINQ работает нормально, за исключением случаев, когда нет результатов для возврата.Затем создается исключение InvalidOperationException.

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

В этом примере я ожидаю только Id первого результата.Может быть другой случай, когда я хочу вернуть весь объект.

var drId = dcDest.drs.Where(dr => dr.ContactID == contactId)
                      .Select(dr => dr.Id).First();

int xId = drId;

1 Ответ

3 голосов
/ 11 января 2011

Вы должны использовать SingleOrDefault().

FirstOrDefault() тоже может сработать, но на самом деле вы говорите, что в коллекции должен быть только один, что делает SingleOrDefault () более правильным выбором (если будет более одного), будет выдано исключение.

Если, с другой стороны, вы ожидаете последовательность, но вам нужно обработать случай, когда элементы не возвращаются, вы также можете использовать DefaultIfEmpty() для возврата значения по умолчанию, когда последовательность пуста.См. http://msdn.microsoft.com/en-us/library/bb355419.aspx

Какое поведение вы хотите, когда он пуст?Идентификатор Ноль или что-то еще?

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