Dayz последовательность не содержит соответствующий элемент
Что ж, я ожидал, что именно эта строка выбрасывает исключение:
First() вызовет исключение если он не может найти ни одного подходящего элемента. Учитывая, что вы проверяете значение null сразу после этого, похоже, что вы хотите FirstOrDefault() , который возвращает значение по умолчанию для типа элемента (которое имеет значение NULL для ссылочных типов), если соответствующие элементы не найдены:
В некоторых ситуациях следует учитывать и другие варианты: Single() (если вы считаете, что есть ровно один соответствующий элемент) и SingleOrDefault() (если вы считаете, что совпадают ровно один или ноль элементов). Я подозреваю, что FirstOrDefault - лучший вариант в данном конкретном случае, но в любом случае стоит знать о других.
С другой стороны, похоже, что вам может быть лучше с объединением здесь в первую очередь. Если вам было все равно, что он будет выполнять все совпадения (а не только первое), вы можете использовать:
Это проще и ИМО.
Даже если вы действительно решите сохранить цикл, у меня есть несколько предложений:
-
Избавьтесь от внешнего if . Вам это не нужно, так как если Count равен нулю, тело цикла for никогда не выполнится.
Исключите общие подвыражения:
По возможности используйте foreach вместо for для начала:
Возможно, использование Where () перед First () может вам помочь, поскольку в этом случае моя проблема была решена.
Для тех из вас, кто столкнулся с этой проблемой при создании контроллера через контекстное меню, повторное открытие Visual Studio от имени администратора исправило ее.
Из библиотеки MSDN:
Метод First<TSource>(IEnumerable<TSource>) вызывает исключение, если источник не содержит элементов. Чтобы вместо этого вернуть значение по умолчанию, когда исходная последовательность пуста, используйте метод FirstOrDefault .
Используйте FirstOrDefault . First никогда не вернет null - если он не может найти соответствующий элемент, он выбрасывает исключение, которое вы видите.
Каждый из листов точно содержит данные, которые отвечают условию.
Вместо First() и Where() используйте FirstOrDefault() с постпроверкой на нулл
UPD: код можно дальше модифицировать, чтобы исключить повторную фильтрацию:
При получении данных возникает ошибка "Последовательность содержит более одного соответствующего элемента". Подскажите, пожалуйста, в чем ошибка?
Странное у вас наследование. Вообще-то, в контексте не должно быть наборов (DbSet) для ребенка и родителя одновременно!
Я так понимаю, ваш BaseClass - это просто контейнер для ID, в базе отдельная таблица ему не нужна. Поэтому вам в контексте надо завести ровно 1 набор сущностей:
В таком случае, к организациям можно будет обратиться через OfType:
Или же можно найти по ID любой Reference, а потом уже привести его к Organisation (но тогда запрос будет медленнее, потому что EF будет проверять все варианты возможных наследников):
Распространённые ошибки при заходе на сервер и их решение :
1. Некорректная версия игры.
2. Вас изгнали из игры( Client contains PBO which. )
В этом случае рекомендуем в параметрах лаунчера проверить актуальность введённого вами ранее айпи сервера,возможно он изменился.
Актуальный айпи сервера ВСЕГДА находится в статусе группы(в самом верху).
3. Connection failed.
Рекомендуем проверить айпи сервера,указанный в параметрах лаунчера.Возможно,он введён некорректно.
Читайте также: