System.NotSupportedException – 无法比较’System.Linq.IQueryable类型的元素

我目前收到以下错误

> EntityFramework.SqlServer.dll中出现“System.NotSupportedException”类型的exception,但未在用户代码中处理

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

我的代码是

public List GetActiveUsers(IEnumerable 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(); } 

这个问题似乎从这条线上抛出

(officeIDs == null || officeIDs.Contains(userOffice.OfficeID))

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

任何人都可以解释我错过了什么或为什么抛出这个错误。

officeIDs == null无法转换为sql语句更改如下:

 (officeIDs == null || officeIDs.Contains(userOffice.OfficeID)) 

首先检查函数顶部是否为空:

 officeIDs = officeIDs ?? Enumerable.Empty; 

并替换该查询:

 (!officeIDs.Any() || officeIDs.Any(id => id == userOffice.OfficeID)) 

officeIDs == null是一个不应该是linq一部分的语句,因为它不能映射到数据库查询(不是查询)。

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

 public List GetActiveUsers(IEnumerable officeIDs, string roleID, string query) { officeIDs = officeIDs ?? new List(); 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(); }