无法创建“System.Object”类型的常量值。在此上下文中仅支持原始类型(例如Int32,String和Guid')

时间:2011-05-07 19:37:07

标签: entity-framework linq-to-entities

我正在使用MVC和实体框架。我在我的模型文件夹中创建了一个类,下面是这个代码。我不断收到上面的错误消息以及下面的两个查询。我知道引用非标量变量存在一个已知问题,但我不确定如何实现变通方法:

http://msdn.microsoft.com/en-us/library/bb896317.aspx#Y1442

private MovieLibraryDBEntities movieLibraryDBEntitiesContext;

public int getNumberOfEntriesReserved()
{
    return (from m in movieLibraryDBEntitiesContext.Movies
            where m.CheckedOut.Equals(1)
            select m).Count();

    //return movieLibraryDBEntitiesContext.Movies
    //  .Where(e => e.CheckedOut.Equals(1))
    //  .Select (e => e.Title).Count();
}

3 个答案:

答案 0 :(得分:14)

您不能在linq-to-entities查询中使用m.CheckedOut.Equals(1)。使用m.CheckedOut == 1CheckedOut必须为integer

答案 1 :(得分:3)

这是一个较老的问题。尝试使用IQueryable接口过滤可空列时,我遇到了同样的问题。我通过首先检查对象是否有值然后检查值来解决问题。

widgets = widgets.Where(x => x.ID.HasValue.Equals(true) &&  x.ID.Value.Equals(widgetID));

答案 2 :(得分:1)

使用Any()的相同问题 我必须改变我的where子句来搜索原始类型,对于我来说

所以这个

where order.User == user

变成这个

where order.User.UserId == user.UserId

blog post解释这个怪癖。