WPF - Linq, перемещенный в конструктор, вызывает исключение нулевой ссылки. - PullRequest
1 голос
/ 02 ноября 2009

Получив полный код для перемещения из моего метода Page_Loaded в конструктор (см. ЗДЕСЬ ), я теперь сталкиваюсь с ошибками в запросе Linq to entity. Это сейчас вызывает исключение нулевой ссылки, и я не могу понять, почему в данный момент. См. Ниже местоположение исключения.

public Building()
{
    InitializeComponent();

    lvBuildings.ItemsSource = App.ocBuildings;
    getBuildings();
}


private void Page_Loaded(object sender, RoutedEventArgs e)
{

}

private void getBuildings()
{
    App.ocBuildings.Clear();
    var tehBuildings = from building in App.ents.Buildings
                       where building.Organisations.OrganisationID == App.selectedOrganisation.OrganisationID
                       select building;

    foreach (Buildings addBuilding in tehBuildings (<--Exception))
    {
        App.ocBuildings.Add(addBuilding);
    }

}

У кого-нибудь есть идеи?

Спасибо, Кохан.

Ответы [ 2 ]

3 голосов
/ 02 ноября 2009

Похоже, что один из следующих элементов оценивается как ноль

  • App.ents
  • App.ents.Buildings
  • building.Organisations
  • App.SelectedOrganisation

Это приведет к тому, что NullReferenceException будет добавлено в каждый цикл, поскольку запрос фактически не оценивается, пока не будет использован.

Нам потребуется дополнительная информация о том, какой из них является нулевым.

0 голосов
/ 02 ноября 2009

@JaredPar.

Исправлено благодаря вам, я бы никогда не подумал взглянуть на предыдущую страницу в моем клиенте (с которой я загружался) для ответа.

У меня была кнопка с кодом:

        Page newPage;
        if (App.ModeType == "Mode1"){ newPage = new MyClient.Pages.Mode1.Building(); }
        else if (App.ModeType == "Mode2") { newPage = new MyClient.Pages.Mode2.RiskQuestions(); }
        else { throw new NotImplementedException(); } ///Must be Mode3

            Organisations thisOrg = (Organisations)lvOrganisations.SelectedItem;
        App.selectedOrganisation = thisOrg;

        NavigationService.Navigate(newPage);

Перемещая App.selectedOrganisation до того, как я установил «newPage», все было исправлено. Я предполагаю, что конструктор вызывается в тот момент, когда я устанавливал "newPage".

Ради ясности, финальный код, который работал для меня, выглядит так:

            Organisations thisOrg = (Organisations)lvOrganisations.SelectedItem;
        App.selectedOrganisation = thisOrg;

        Page newPage;
        if (App.ModeType == "Mode1"){ newPage = new MyClient.Pages.Mode1.Building(); }
        else if (App.ModeType == "Mode2") { newPage = new MyClient.Pages.Mode2.RiskQuestions(); }
        else { throw new NotImplementedException(); } ///Must be Mode3

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