Выбор объектов из базы данных

#c# #.net #database #wpf #entity-framework

#c# #.net #База данных #wpf #entity-framework

Вопрос:

В настоящее время я работаю над проектом WPF, который берет данные из базы данных.

 class Quizzes: INotifyPropertyChanged
    {
        private long _id;
        private string _quizType = "";
        private string _quizName = "";

        [Key]
        public long QuizID
        {
            get
            {
                return _id;
            }

            set
            {
                _id = value;
                OnPropertyChanged("QuizID");
            }
        }

        public string QuizType
        {
            get
            {
                return _quizType;
            }

            set
            {
                _quizType = value;
                OnPropertyChanged("QuizType");
            }
        }

        public string QuizName
        {
            get
            {
                return _quizName;
            }

            set
            {
                _quizName = value;
                OnPropertyChanged("QuizName");
            }
        }

        public Quizzes(long id, string quizName, string quizType)
        {
            QuizID = id;
            QuizName = quizName;
            QuizType = quizType;
        }

        public event PropertyChangedEventHandler PropertyChanged;

        public void OnPropertyChanged([CallerMemberName] string prop = "")
        {
            if (PropertyChanged != null)
                PropertyChanged(this, new PropertyChangedEventArgs(prop));
        }
    }
  

Я пытаюсь создать объект из столбцов базы данных

             Quizzes temp = (Quizzes)db.
            Quizzes
            .Where(c => c.QuizID == randomQuizId)
            .Select(u => new Quizes (u.QuizID, u.QuizName, u.QuizType));

  

Эта часть вызывает исключение, в котором говорится, что «Не удалось привести тип объекта»System.Data.Entity.Инфраструктура.DbQuery `1 [Quizzes]» для ввода «Quizzes»
«. У меня есть конструктор в классе «Quizzes», но он все еще не работает.

Ответ №1:

Вы написали QuiZes с одним «Z», но ваш класс содержит два. У вас есть другой такой класс или это опечатка?

введите описание изображения здесь

Комментарии:

1. О, вы правы, это не главная проблема, но спасибо!

Ответ №2:

Ваш запрос возвращает коллекцию Quizzes , и вы пытаетесь назначить ее единице Quizzes вместо a IEnumerable<Quizzes> . Вы можете изменить запрос, чтобы выбрать один объект с правильным первичным ключом, используя Find метод, First метод или Single метод. Смотрите Здесь для описания различий между ними.

 Quizzes temp = (Quizzes)db.
        Quizzes
        .First(c => c.QuizID == randomQuizId)     
        .Select(u => new Quizes (u.QuizID, u.QuizName, u.QuizType));
  

Чтобы избежать путаницы, было бы лучше, если бы имя класса было единственным, а не множественным, т. Е. Quiz Вместо Quizzes .

Комментарии:

1. Добро пожаловать. Пожалуйста, подумайте о том, чтобы отметить ответ как принятый.