Определение если существует уровне


Это код, который я использую. Я работаю с LINQ для SQL и я использую эту модель в моей программе:

Как я могу модель этого класса в базе данных

Человек должен выйти на уровень, например 1.2, 1.1.4 и т. д. Программа должна проверить, если уровень доступен или занят. Функция ToIntArray является расширением и состоит из разбивки текста и конвертации строки[] для типа int[].

Первое условие, как вы можете видеть, несоответствие которых я в этом посте:

Проблемы с типами nullable в функции LINQ

private void AddButton_Click(object sender, RoutedEventArgs e)
{
    NorthwindDataContext cd = new NorthwindDataContext();

    int[] levels = LevelTextBox.Text.ToIntArray('.');
    string newGroupName = NameTextBox.Text;

    Objective currentObjective = null;
    int? identity = null;

    for (int i = 0; i < levels.Length - 1; i++ )
    {
        int currentRank = levels[i];

        if (identity == null)
        {
            currentObjective = (from p in cd.Objective
                                where p.Level == currentRank && p.Parent_ObjectiveID == null
                                select p).SingleOrDefault();
        }
        else
        {
            currentObjective = (from p in cd.Objective
                                where p.Level == currentRank && p.Parent_ObjectiveID == identity
                                select p).SingleOrDefault();
        }

        if (currentObjective == null)
        {
            MessageBox.Show("Levels don't exist");
            return;
        }
        else
        {
            identity = currentObjective.ObjectiveID;
        }
    }

    if (currentObjective != null)
    {
        if (levels.Last() == currentObjective.Level)
        {
            MessageBox.Show("Level already exists");
            return;
        }
    }
    else
    {
        var aux = (from p in cd.Objective
                   where p.Parent_ObjectiveID == null && p.Level == levels.Last()
                   select p).SingleOrDefault();

        if (aux != null)
        {
            MessageBox.Show("Level already exists");
            return;
        }
    }

    var newObjective = new Objective();
    newObjective.Name = NameTextBox.Text;
    newObjective.Level = levels.Last();
    newObjective.Parent_ObjectiveID = currentObjective == null ? null : (int?)currentObjective.ObjectiveID ;

    cd.Objective.InsertOnSubmit(newObjective);
    cd.SubmitChanges();

    MessageBox.Show("The new objective has added successfully");
    NameTextBox.Clear();
    LoadObjectives();
}


425
3
задан 17 августа 2011 в 12:08 Источник Поделиться
Комментарии
1 ответ

Несколько замечаний:


  1. Вы должны переместить этот код из AddButton_Click в некоторых бизнес-логики класса.

  2. Может быть, вы должны добавить некоторые проверки LevelTextBox.Текст, перед использованием его стоимости.

  3. Вы должны разделить этот код на разные методы.


    Здесь у вас есть три обязанности:


    1. Узнайте, если уровень вообще существует.

    2. Узнайте, если указанный уровень уже существует.

    3. Создать новый уровень.



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

  4. Может быть, я ошибусь где-то, но я не могу понять, как этот код проверяет, если уровень уже существует. Я не могу видеть, как код будет когда-нибудь попасть в окно MessageBox.Шоу("уже существует"); в обоих местах.

3
ответ дан 17 августа 2011 в 08:08 Источник Поделиться