C# System.NotSupportedException-无法比较“System.Linq.IQueryable”类型的元素

C# System.NotSupportedException-无法比较“System.Linq.IQueryable”类型的元素,c#,.net,entity-framework,linq,C#,.net,Entity Framework,Linq,我目前得到以下错误 在>EntityFramework.SqlServer.dll中发生类型为“System.NotSupportedException”的异常,但未在用户代码中处理 其他信息:无法比较“System.Linq.IQueryable`1[[System.Int32,mscorlib,Version=4.0.0.0,>Culture=neutral,PublicKeyToken=b77a5c561934e089]”类型的元素。仅支持基元类型、>枚举类型和实体类型 我的代码是 pub

我目前得到以下错误

在>EntityFramework.SqlServer.dll中发生类型为“System.NotSupportedException”的异常,但未在用户代码中处理

其他信息:无法比较“System.Linq.IQueryable`1[[System.Int32,mscorlib,Version=4.0.0.0,>Culture=neutral,PublicKeyToken=b77a5c561934e089]”类型的元素。仅支持基元类型、>枚举类型和实体类型

我的代码是

public List<User> GetActiveUsers(IEnumerable<int> officeIDs, string roleID, string query)
{
    return (from user in GetDBContext.User
            join userRole in GetDBContext.UserRole
                on user.UserID equals userRole.UserID
            join userOffice in GetDBContext.UserAuthorizedOffice
                on user.UserID equals userOffice.UserID
            where user.IsActive == true &&
                    user.UserTypeID == 1 &&
                    userOffice.IsAuthorized &&
                    userOffice.Office.IsActive &&
                    (officeIDs == null || officeIDs.Contains(userOffice.OfficeID)) &&
                    string.Equals(userRole.RoleID, roleID) &&
                    (user.FirstName + user.LastName).Contains(query)
            select user).ToList();
}
这个问题似乎被抛到了一边

OfficeID==null | | OfficeID.ContainsuserOffice.OfficeID

如果删除第一个条件OfficeId==null,查询将完美执行

任何人都可以解释一下我遗漏了什么或者抛出此错误的原因。

OfficeID==null是一条语句,它不应该是linq的一部分,因为它不可映射到数据库查询不是查询

确保OfficeID不为null,并将其从linq查询中删除

public List<User> GetActiveUsers(IEnumerable<int> officeIDs, string roleID, string query)
    {
        officeIDs = officeIDs ?? new List<int>();

        return (from user in GetDBContext.User
                join userRole in GetDBContext.UserRole
                    on user.UserID equals userRole.UserID
                join userOffice in GetDBContext.UserAuthorizedOffice
                    on user.UserID equals userOffice.UserID
                where user.IsActive == true &&
                        user.UserTypeID == 1 &&
                        userOffice.IsAuthorized &&
                        userOffice.Office.IsActive &&
                        officeIDs.Contains(userOffice.OfficeID) &&
                        string.Equals(userRole.RoleID, roleID) &&
                        (user.FirstName + user.LastName).Contains(query)
                select user).ToList();
    }
OfficeID==null无法转换为sql语句 更改以下内容:

(officeIDs == null || officeIDs.Contains(userOffice.OfficeID))
首先检查函数顶部是否为null:在后面添加括号

officeIDs = officeIDs ?? Enumerable.Empty<int>();

现在,如果为null,则不会返回任何内容。相反,您应该执行类似于query=from。。。。。。。。没有ToList,然后如果officeid不是null{query.Where…}返回查询
(!officeIDs.Any() || officeIDs.Any(id => id == userOffice.OfficeID))