EF4 выдает исключение NotSupported, когда оно (imho) не должно - PullRequest
0 голосов
/ 06 марта 2011

ОК, эта штука просто озадачивает меня.У меня есть таблица, скажем «Пользователи», со столбцами «Идентификатор пользователя», «Имя» и т. Д. Имейте сопоставленный объект с использованием CTP5.Итак, теперь я хочу проверить это и сделать следующее:

List<User> users = new List();
// Some init code here, making say 3 users.
using (UsersDbContext)
{
  // insert users
}

Пока все хорошо, работает отлично.Теперь я хочу посмотреть, совпадают ли записи, поэтому я выбираю пользователей обратно, используя следующий код.

using (UsersDbContext dbc = UsersDbContext.GetDbContext())
{
List<Users> usersRead = dbc.Users.Where(x => x.ID >= users[0].ID && x.ID <= users[users.Count - 1].ID).ToList();
}

Это выбрасывает и исключение:

System.NotSupportedException: LINQ toОбъекты не распознают метод метода 'User get_Item (Int32)', и этот метод не может быть преобразован в выражение хранилища.

EF испытывает трудности, видя, что я просто прошу вернуть int вПользователи [0] .ID?Если я заменяю вызов users [0] .ID на прямой int - работает нормально.

Я получаю то, что он пытается сделать, но я подумал, что довольно легко проверить, принадлежит ли метод.NET или Sql Server?

1 Ответ

1 голос
/ 06 марта 2011

Вы пытаетесь получить доступ к индексатору в выражении EF, которое не переводится в запрос SQL. Вам нужно будет переместить параметры за пределы запроса следующим образом:

int first = users[0].ID;
int last = users[users.Count - 1].ID;
List<Users> usersRead = dbc.Users.Where(x => x.ID >= first && x.ID <= last).ToList();
...