Так что в основном я пытаюсь вернуть набор значений в GridView, который не соответствует ни одному из значений в массиве. Однако, при попытке я получаю ошибкуLINQ to Entities не распознает метод 'Int32 ToInt32 (Boolean)'
LINQ к Entities не распознает метод «Int32 ToInt32 (Boolean)» метод, и этот метод не может быть переведен в выражение магазина.
Вот мой код:
public List<Room> getAvailRoom()
{
//Sessions from Default Page
DateTime checkedIn = Convert.ToDateTime(System.Web.HttpContext.Current.Session["checkIn"]);
DateTime checkedOut = Convert.ToDateTime(System.Web.HttpContext.Current.Session["checkOut"]);
//retrieves all the bookings which happen between two dates
var booking = (from b in context.Booking
where b.departureDate >= checkedIn && b.arrivalDate <= checkedOut
select b);
//Counts how many rooms are booked during those dates
int countRooms = booking.Count();
int[] bookings = new int[countRooms];
foreach (var booktypes in booking)
{
for (int i = 0; i < countRooms; i++)
{
//Addings the RoomIds to the array
bookings[i] = booktypes.RoomId;
}
}
//Returns values that does not equal to any roomIds within the bookings array.
return (from b in context.Room
where b.roomId != Convert.ToInt32(bookings.Any())
select b).ToList();
}
Любые идеи, что я делаю неправильно?
возможно дубликат [Метод не может быть переведен в выражение магазина] (HTTP: //stackoverflow.com/questions/3846716/method-cannot-be-translated-into-a-store-expression) –
Стоит объяснить, почему это происходит. LINQ для объектов в памяти ('IEnumerable') может обрабатывать любое допустимое выражение C#, потому что lambda компилируется компилятором C# и вызывается просто путем вызова делегата. Другие поставщики LINQ (например, работающие на 'IQueryable ') должны перевести ваши lambdas на что-то другое (например, SQL-запросы). Поскольку не все допустимые выражения C# могут быть переведены на что-то еще (SQL очень ограничен по сравнению с C#), такие провайдеры могут обрабатывать только определенные типы выражений. Итак, вы нашли выражение, которое ваш провайдер не может обработать. –