У меня есть код, который выбирает некоторые значения из моей базы данных. У меня есть IQueryable запросов, что содержит ICollection комнат.Связанная с LINQ ошибка «Невозможно создать постоянное значение типа« System.Object ». В этом контексте поддерживаются только примитивные типы или типы перечислений.
Я хочу, чтобы получить 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);}
@MattSull r.belongsTo - это просто строка, но это внешний ключ. JSONdata является ViewModel – mwild
Вы уверены, что исключение выбрасывается в строке 'List>'? Эта ошибка может произойти с Linq для объектов, когда вы используете '.Equals()' вместо '==', поэтому я спрашиваю. –
MattSull
Я не уверен, но может быть, вам нужно использовать SelectMany(), чтобы сгладить список вместо .Select()? – sukotto1