«Последовательность не содержит элементов», происходит? - PullRequest
0 голосов
/ 21 апреля 2020

Это WINDOWSFORM

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

Последовательность не содержит элементов

private void cmbOfficeNumber_SelectedIndexChanged(object sender, EventArgs e)
{
    using (UnitOfWork db = new UnitOfWork())

    if (cmbOfficeNumber.SelectedValue.ToString() != null)
    {
        txtOfficeName.Text = db.OfficeRepository.GetOfficeNamebyNumber(cmbOfficeNumber.Text);

    }
}

А это мой код хранилища

public string GetOfficeNamebyNumber(string officeNumber)
{
    return db.Office.First(g => g.OfficeNumber == officeNumber).OfficeName;
}

РЕДАКТИРОВАТЬ: При использовании

return db.Office.FirstOrDefault(g => g.OfficeNumber == officeNumber).OfficeName;

я получаю другую ошибку

Ссылка на объект не установлен в экземпляр объекта

1 Ответ

1 голос
/ 21 апреля 2020

Если First () приводит к

Sequence contains no elements

Это означает, что условие в лямбда-выражении не привело к попаданию. Потому что First требует, чтобы у вас было хотя бы одно совпадение.

Если FirstOrDefault (). Свойство приводит к

Object reference not set to an instance of an object

Это означает, что лямбда-выражение не привело ни к какому обращению, и оно возвращает значение по умолчанию типа возврата. В случае ссылочного объекта он будет нулевым. Затем вы попытались получить доступ к свойству null, которое вызывает исключение.

Проще говоря. Ваша проблема в том, что ваше сравнение не возвращает ни одного хита.

Вам нужно вставить отказоустойчивый, чтобы это не делало sh

Что-то вроде:

public string GetOfficeNamebyNumber(string officeNumber)
{
    var result = db.Office.FirstOrDefault(g => g.OfficeNumber == officeNumber);

    if(result == null)
        return string.Empty;

    return result.OfficeName;
}

Это также может быть сокращено до

public string GetOfficeNamebyNumber(string officeNumber)
{
    var result = db.Office.FirstOrDefault(g => g.OfficeNumber == officeNumber);

    return result?.OfficeName ?? string.Empty;
}

или даже

public string GetOfficeNamebyNumber(string officeNumber)
{
    return db.Office.FirstOrDefault(g => g.OfficeNumber == officeNumber)?.OfficeName ?? string.Empty;
}

Я надеюсь, что это пошаговое объяснение даст вам информацию, необходимую для решения проблемы.

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