내가 지금처럼 엔티티 프레임 워크를 사용하여 일부 데이터를 retriveing하고 함께 페이징을 결합 :엔티티 프레임 워크 : 동적 LINQ있는 OrderBy
var items = GetItems(storeNumber);
Sort(items);
Page(items);
return await items.ToListAsync();
나는이 개인 도우미 메서드가 있습니다
private IQueryable<Item> GetItems(string storeNumber)
{
return _dbContext.Items.Where(x => x.StoreNumber == storeNumber);
}
내가 동적를 사용하여 결과를 정렬을 LINQ. 내 페이지 방법에
private void Sort(IQueryable<Item> items, string fieldToSort, string sortDirection)
{
items = items.OrderBy($"{fieldToSort} {sortDirection}");
}
내가
방법 '있는 OrderBy는'메소드 전에 호출해야하는 예외를 얻을
private void Page(IQueryable<Item> items, int skip, int take)
{
items = items.Skip(skip).Take(take);
}
가 나는 이유를 의심했다 '건너 뛰기' 항목이 IOrderedQueryable<Item>
이어야하지만 이되어야하므로 오류가 발생했습니다.을 반환하는 동적 LINQ OrderBy에 대한 오버로드가 없습니다.. 같은 방법으로 정렬 코드와 페이지 코드를 추출한 경우 var
을 사용하면 더 이상 문제가되지 않으므로 해당 코드는 해당 형식을 유추합니다. 문제는 정렬 및 페이징 할 때 IQueryable
인터페이스를 사용하는 것 같습니다. 이 논리를 별도의 메서드로 분해 할 수 있지만 정렬을 위해 동적 LINQ를 사용하는 방법이 있습니까?
도움을 주시면 감사하겠습니다.
문제는 훨씬 더 사소합니다. 현재 'Sort' 메소드는 적용 가능한 쿼리 가능한 연산자로 결과를 반환하지 않기 때문에 효과가 없습니다 (물론 Page 및 LINQ 메소드). 'IQueryable- '을 반환하는 메소드로 변경하십시오. 'private IQueryable
- 정렬 (...) {반환 items.OrderBy (...); }'. 반환 된 결과도 사용하는 것을 잊지 않습니다. –
@IvanStoev 메서드는 void이지만 참조로 항목을 전달하고 있습니다. 확장 쿼리 가능 항목을 설정하고 있습니다. 어쩌면 혼란스러워할까요? – benjrb
개체에 대한 참조를 항목 (메서드의 로컬 변수)에 전달하고 있습니다. 그런 다음 항목 (여전히 로컬 변수)을 변경하면 메서드가 끝납니다. 원하는 것을 얻기 위해서 (외부 아이템 **를 변경하기 위해서)'ref IQueryable- items'을 사용해야하거나, 지역 변수'items'를 반환해야합니다. 'return ... '을 사용하는 것이 가장 일반적인 방법입니다. –