我正在使用OData语法获取数据: ?http://server.com/api/users $跳过= 20&安培; $顶部= 10
我正在尝试在我的Web API Controller中为每个获取的实体添加索引。 每次我收到以下错误:
LINQ to Entities无法识别该方法 “System.Linq.IQueryable
1[WebPortal.Models.UserDto] Select[UserInDatabase,UserDto](System.Linq.IQueryable
1 [DataContext.UserInDatabase] System.Linq.Expressions.Expression1[System.Func
3 [DataContext.Media,System.Int32,WebPortal.Models.UserDto]])” 方法,这个方法无法翻译成商店 表达 “” ExceptionType。 “:” System.NotSupportedException“
据我所知,我无法使用Select(u,index)=>使用Entity Framework上下文时的选择器(适用于内存集合)。不幸的是,我正在使用它来通过OData + QueryableAttribute公开我的收藏:
public class UsersController : ApiController
{
[Queryable]
public IQueryable<UserDto> Get()
{
return _repository.Users
.Select((u, i) => new UserDto
{
Index = i,
Name = u.Name,
Age = u.Age
})
.AsQueryable();
}
}
如何修改获取进程以继续使用OData语法并能够将具有索引的实体返回到请求方?
我的实体:
public class UserInDatabase
{
public string Name { get; set; }
public int Age { get; set; }
}
public class UserDto
{
public int Index { get; set; }
public string Name { get; set; }
public int Age { get; set; }
}
TIA
答案 0 :(得分:1)
尝试更改此行:
return _repository.Users
到
return _repository.Users.AsEnumerable()
这会强制查询在投影到您的DTO之前执行。