0

我的讀取與OData的語法數據: http://server.com/api/users $跳過= 20 & $頂部= 10的WebAPI控制器拋出「LINQ到實體無法識別方法」的錯誤

我想在我的Web API控制器中爲每個獲取的實體添加索引。 每當我收到以下錯誤:

LINQ to Entities does not recognize the method 'System.Linq.IQueryable 1[WebPortal.Models.UserDto] Select[UserInDatabase,UserDto](System.Linq.IQueryable 1[DataContext.UserInDatabase], System.Linq.Expressions.Expression 1[System.Func 3[DataContext.Media,System.Int32,WebPortal.Models.UserDto]])' method, and this method cannot be translated into a store expression.","ExceptionType":"System.NotSupportedException"

據我瞭解我無法使用選擇(U,指數)=>選擇實體框架環境中工作一段時間(正常工作在內存集合)。不幸的是,我用它通過的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

回答

1

嘗試改變這一行:

return _repository.Users 

return _repository.Users.AsEnumerable() 

這應該強制查詢投影到前執行的d至。

+0

不幸的是,這不是這種情況,因爲查詢在應用過濾器之前從數據庫中提取所有數據。我在那裏有成千上萬的行。這就是我引入分頁的確切原因。 –

+0

在* AsEnumerable()之前執行分頁/過濾(跳過/取出)代碼*。您的索引也必須考慮您跳過的行數(無論您跳過多少行,它將從0開始)。 –

相關問題