首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >LINQ,无法创建XXX类型的常量值。在此上下文中仅支持基元类型或枚举类型

LINQ,无法创建XXX类型的常量值。在此上下文中仅支持基元类型或枚举类型
EN

Stack Overflow用户
提问于 2012-11-16 04:24:11
回答 5查看 76.4K关注 0票数 63

在我的应用程序中,我有讲师,他们有他们可以教授的课程列表,当我删除一门课程时,我想要删除与讲师的连接。代码如下:

代码语言:javascript
复制
public void RemoveCourse(int courseId)
{
    using (var db = new AcademicTimetableDbContext())
    {
        var courseFromDb = db.Courses.Find(courseId);

        var toRemove = db.Lecturers
                        .Where(l => l.Courses.Contains(courseFromDb)).ToList();

        foreach (var lecturer in toRemove)
        {
            lecturer.Courses.Remove(courseFromDb);
        }

        db.SaveChanges();
    }
}

但它不起作用。我得到了

NotSupportedException:无法创建Course类型的常量值。在此上下文中仅支持基元类型或枚举类型。

我做错了什么?

EN

回答 5

Stack Overflow用户

回答已采纳

发布于 2012-11-16 04:46:16

不能将Contains与非原始值一起使用。做

代码语言:javascript
复制
Where(l => l.Courses.Select(c => c.CourseId).Contains(courseId)

(或您使用的Id字段)。

票数 89
EN

Stack Overflow用户

发布于 2013-07-05 00:52:08

如果您使用的是DbContext,则可以查询.Local集合,并且==运算符也将处理对象:

代码语言:javascript
复制
public void RemoveCourse(int courseId)
{
    using (var db = new AcademicTimetableDbContext())
    {
        var courseFromDb = db.Courses.Find(courseId);

        db.Lecturers.Load() //this is optional, it may take some time in the first load

        //Add .Local to this line
        var toRemove = db.Lecturers.Local 
                        .Where(l => l.Courses.Contains(courseFromDb)).ToList();

        foreach (var lecturer in toRemove)
        {
            lecturer.Courses.Remove(courseFromDb);
        }

        db.SaveChanges();
    }
}

.Local是一个ObservableCollection,因此您可以在其中比较任何您喜欢的内容(不限于不支持对象比较的SQL查询)。为了确保获得.Local集合中的所有对象,您可以在调用.Local之前调用db.Lecturers.Load()方法,这会将所有数据库条目都放入Local集合中。

票数 8
EN

Stack Overflow用户

发布于 2017-11-03 14:11:28

下面行的Courses集合应为null或空。

代码语言:javascript
复制
 var toRemove = db.Lecturers
                        .Where(l => l.Courses.Contains(courseFromDb)).ToList();
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/13405568

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档