LINQ 相关错误“无法创建 'System.Object' 类型的常量值。在此上下文中仅支持基本类型或枚举类型

LINQ related error "Unable to create a constant value of type 'System.Object'. Only primitive types or enumeration types are supported in this context

我有一些代码可以从我的数据库中选择一些值。我有一个 IQueryable 请求,其中包含一个 ICollection 房间。

我想要一个List<ICollection<rooms>>。我已尝试以下操作,但收到上述错误。

有什么想法吗??

public ActionResult _roomChecker(checkRooms JSONdata){
        var rooms = db.rooms.Include(r=>r.building).Include(r=>r.facilities);
        rooms = rooms.Where(r => r.capacity >= JSONdata.capacity);
        if (JSONdata.type != "Any")
        {
            rooms = rooms.Where(r => r.roomType.Equals(JSONdata.type));
        }
        if (JSONdata.park != "Any")
        {
            rooms = rooms.Where(r => r.building.park.Equals(JSONdata.park));
        }

        if (JSONdata.facilities != null)
        {
            for (var i = 0; i < JSONdata.facilities.Length; i++)
            {
                rooms = rooms.Where(r => r.facilities.Any(f => f.facilityName.Equals(JSONdata.facilities[i])));

            }
        }

        var proposedRequest = db.requests.Include(r => r.rooms);
        proposedRequest = proposedRequest.Where(r=>r.booked.Equals(1));
        proposedRequest = proposedRequest.Where(r => r.roundID.Equals(JSONdata.roundID));
        proposedRequest = proposedRequest.Where(r => r.day.Equals(JSONdata.day));
        proposedRequest = proposedRequest.Where(s => s.start < JSONdata.start + JSONdata.length && s.start + s.length > JSONdata.start);
        int[] standardWeeks = new int[12] {1,2,3,4,5,6,7,8,9,10,11,12};
        var containsStandard = standardWeeks.Intersect(JSONdata.weeks);
        if (containsStandard.Count()!=0)
        {
            proposedRequest = proposedRequest.Where(r => r.weeks_request.Any(f => JSONdata.weeks.Contains(f.week)) || r.weeks.Equals(1));
        }
        else {
            proposedRequest = proposedRequest.Where(r => r.weeks_request.Any(f => JSONdata.weeks.Contains(f.week)));
        }

    //ERROR OCCURS ON THIS LINE BELOW

        List<ICollection<room>> bookedRooms = proposedRequest.Select(r => r.rooms).ToList();


        var deptRooms = db.rooms.Include(r => r.building).Include(r => r.facilities).Where(r => r.belongsTo.Equals(JSONdata.deptCode));

        roomCheckerObject suitableRooms = new roomCheckerObject();
        suitableRooms.code = JSONdata.deptCode;
        suitableRooms.roomNo = JSONdata.roomNo;
        suitableRooms.RequestNo = JSONdata.RequestNo;
        if(rooms.Count() >0){
            suitableRooms.rooms = rooms.ToList();
            var buildings = rooms.Select(r => r.building).Distinct();
            suitableRooms.buildings = buildings.ToList();
        }
        if(bookedRooms.Count() >0){
            suitableRooms.bookedRooms = bookedRooms;
        }

        if(deptRooms.Count() >0){
            suitableRooms.deptRooms = deptRooms.ToList();
        }
        return PartialView(suitableRooms);}

很难说出到底是什么导致了错误,但我可以看到 3 个可能的罪魁祸首:

1) 您正在使用 .Equals() 和 Linq to entities (L2E) 查询。这可能会导致问题,请参阅 here

2) 你说错误发生在声明List<ICollection<room>>的那一行。在这一行中,您在任何 L2E 语句中第一次调用 .ToList()。只有现在您的 L2E 查询才会针对数据库执行 (see EF Query Execution),这意味着之前的 L2E 语句中的任何错误(使用 .Equals())都可能引发异常。

3) proposedRequest.Select(r => r.rooms).ToList(); 真的 return 是 List<ICollection<room>> 吗?尝试使用 .SelectMany()(尽管这可能会产生不良影响)或进行完整性检查,将 List<ICollection<room>> 更改为 var 以查看查询将 return.