0

"엔티티에 LINQ는 방법을 인식하지 않습니다"가 발생합니다 : http://server.com/api/users을 $ 내가 시도하고있다 = 10WebAPI 컨트롤러는 내가 중 하나로, OData의 구문을 사용하여 데이터를 가져 오는거야 오류

를 = 20 & $ 위로를 건너 내 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() 

이는 투사하기 전에 실행 쿼리를 강제적으로 당신의 디 에.

+0

필터를 적용하기 전에 쿼리가 데이터베이스의 모든 데이터를 가져 오기 때문에 이러한 경우는 아닙니다. 거기에 수천 개의 행이 있습니다. 이것이 바로 페이지 매김을 소개하는 정확한 이유입니다. –

+0

* AsEnumerable() 전에 페이지 매김/필터링 (Skip/Take) 코드 *를 수행하십시오. 색인은 건너 뛴 행 수를 가져와야합니다 (건너 뛴 건너 뛰기 수에 관계없이 0부터 시작합니다). –

관련 문제