尝试选择匿名类型时实体框架中的异常

时间:2011-03-28 19:47:57

标签: entity-framework linq-to-entities

我无法理解在尝试针对实体链接执行此查询时生成的异常的性质。

 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   实体仅支持投射   实体数据模型基元类型。

如果我用“Count = 3”之类的常量替换“Count = userRepos.Users.Count()”,那么没有异常,所以我相信查询的这个方面是关键。

1 个答案:

答案 0 :(得分:1)

我认为你不能像这样组合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过滤器)