#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. Добро пожаловать. Пожалуйста, подумайте о том, чтобы отметить ответ как принятый.