Исключение в Entity Framework при попытке выбрать анонимный тип - PullRequest
0 голосов
/ 28 марта 2011

У меня проблемы с пониманием природы исключения, сгенерированного при попытке выполнить этот запрос для ссылки на сущности.

 var internalUsersFromRepos = userRepos.Users.Where(u => u.IsInternalUser)
                                                       .OrderBy(u => u.SirName)
                                                       .Skip((int)((page - 1) * usersPerPage))
                                                       .Take((int)usersPerPage)
                                                       .Select(u => new { User = u, Count = userRepos.Users.Count() })
                                                       .ToList();

Невозможно привести тип 'System.Data.Objects.ObjectQuery 1' to type 'System.Linq.IQueryable 1' .LINQ to Entities поддерживает только приведение типов примитивов Entity Data Model.

Если я заменю «Count = userRepos.Users.Count ()» чем-то постоянным, таким как «Count = 3», то исключений нет, поэтомуЯ считаю, что этот аспект запроса является ключевым.

1 Ответ

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

Я думаю, что вы не можете комбинировать ObjectQueries, как это.Также ваш запрос совершенно не верен.Используйте это:

var query = userRepos.Users.Where(u => u.IsInternalUser);
var count = query.Count();
var internalUsersFromRepos = query.OrderBy(u => u.SirName)
                                  .Skip((int)((page - 1) * usersPerPage))
                                  .Take((int)usersPerPage)
                                  .ToList();

Я понимаю, что вы хотите возвращать счетные и постраничные данные за один прием, но это не представляется возможным, если вы не используете хранимую процедуру.Данные и число дают два разных набора результатов, поэтому их нельзя легко вернуть как один набор результатов.Ваш текущий запрос попытался вернуть список пользователей и для каждого возвращенного пользователя подсчитал количество всех пользователей (без фильтра IsInternalUser)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...