【问题标题】:Selecting objects from database从数据库中选择对象
【发布时间】:2021-02-26 07:29:20
【问题描述】:

目前,我正在开发一个从数据库中获取数据的 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.Infrastructure.DbQuery`1 [Quizzes]”来键入“Quizzes” “。我在“测验”类中有一个构造函数,但它仍然无法正常工作。

【问题讨论】:

    标签: c# .net database wpf entity-framework


    【解决方案1】:

    您的查询返回Quizzes 的集合,并且您试图将其分配给一个Quizzes 而不是IEnumerable<Quizzes>。您可以使用Find 方法、First 方法或Single 方法修改查询以选择具有正确主键的一个对象。请参阅here 了解它们之间的区别。

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

    为避免混淆,类名最好是单数而不是复数,即Quiz 而不是Quizzes

    【讨论】:

    • 不客气。请考虑将答案标记为已接受。
    【解决方案2】:

    你用一个'Z'写了QuiZes,但你的类包含两个。你有其他这样的课程还是错字?

    【讨论】:

    • 哦,你是对的,这不是主要问题,但是谢谢!
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-12-11
    • 2012-01-01
    • 2019-01-18
    • 2021-02-20
    • 2020-11-18
    • 1970-01-01
    相关资源
    最近更新 更多