'В экземпляре объекта не задана ссылка на объект.' в C # linq to SQL - PullRequest
0 голосов
/ 02 марта 2012

это строка кода, где она показывает ошибку

var physician = (from userAccounts in myDb.Physicians
                            where userAccounts.Phy_UserName == txtUserName.Text
                            select userAccounts).FirstOrDefault();

            setFirstName(physician.Phy_FName);

Но в моем сеттере есть предварительное условие, что, если это нулевое значение, оно ничего не будет делать, но почему это все равноэта ошибка?вот мой код сеттеров

public void setFirstName(string fName) {
            if (fName == null)
            {
            }
            else {
                firstName = fName;
            }
        }

Ответы [ 5 ]

4 голосов
/ 02 марта 2012

Я предполагаю, что ваш запрос врача возвращает null.

Затем вы пытаетесь вызвать свойство Phy_FName для значения null.

Проверказначение null в вашем методе setFirstName не защитит вас в этом случае, потому что Phy_FName - это не то, что есть null, physician.

Кроме того, вы можетехотите проверить, что fName не является пустой строкой в ​​вашем методе setFirstName.Вы можете проверить оба условия, используя if (!String.IsNullOrEmpty(fName))

1 голос
/ 02 марта 2012

Попробуйте это:

var physician = (from userAccounts in myDb.Physicians
                            where userAccounts.Phy_UserName == txtUserName.Text
                            select userAccounts).FirstOrDefault();

if(physician != null)
{
  setFirstName(physician.Phy_FName);
}
else
{
  //Throw Error or any any other processing as needed.
}
0 голосов
/ 02 марта 2012

Чтобы уточнить мое неправильное предположение, что, возможно, вы также подумали:

FirstOrDefault вернет значения по умолчанию, если они есть, но по умолчанию для объекта будет null. Так что, скорее всего, ваш запрос Linq возвращает нулевое значение для врача. Из которых вы затем пытаетесь получить доступ к Phy_FName.

Вот вопрос SO, который разъясняет это более подробно: Укажите значение по умолчанию для ссылочного типа

0 голосов
/ 02 марта 2012

Свойство Phy_FName будет оцениваться в любом случае, поэтому убедитесь, что physician не равно нулю, прежде чем пытаться прочитать его свойства.

Вам нужно будет проверить значение physician перед попыткойчтобы использовать это:

if (physician != null)
    setFirstName(physician.Phy_FName);
0 голосов
/ 02 марта 2012

Бьюсь об заклад, physician является нулевым.Вы уверены, что что-то получаете от запроса?

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