특별히 설계된 뷰에서 렌더링되는 DX gridview가 있습니다. Linq-2-Entities 쿼리에서 값을 채운 미리 정의 된 ViewModel 객체를 전달합니다. 문제는 콜백 함수에서 L2E 쿼리가 필터링, 정렬 및 페이징이 DevExpress 그리드에 의해 수행되기 전에 실제로 DB에서 실행된다는 것입니다. IE : 데이터가보기에 전달되기 전에 쿼리가 실제로 실행이 상황에서DevExpress MVC Gridview + LINQ
public ActionResult GridViewPartial(string myParameters)
{
var modelData = from s in db.myTable
select new { modelName = s.Name };
return PartialView("GridViewPartial", modelData);
}
(단순화 된 예는 실제 상황에서 우리는 여러 테이블에서 여전히 하나의 LINQ 쿼리에서 데이터를 선택). 따라서 실제로 DB에서 너무 많은 데이터를 선택하는 반면 gridview는 선택된 페이지 만 표시합니다.
사용자가 선택한 페이지의 데이터 만 선택하도록 어떻게 쿼리를 수정해야합니까? IE. 10 개의 행을 건너 뛰고 설명 된 상황에서와 같이 필터링/정렬/페이징을 적용한 후 100,000 행을 선택하는 대신 사용자가 2 페이지를 선택할 때 L2E 쿼리에서 10을 가져옵니다.
게시 한 첫 번째 URL 인 http://www.devexpress.com/issue=Q333116에는 페이징/정렬/필터링 매개 변수를 사용하기 위해 LINQ 쿼리를 생성하기 위해 자체 로직을 실제로 사용하는 것으로 보이는 예제 프로젝트가 포함되어 있습니다. "기본"linq 쿼리 (IQueryable myLinqObject = dbContext.myTable에서 s)를 만들 수 없으며 gridview에서 데이터베이스 측면에서 쿼리를 실행하기 전에 이러한 매개 변수를 자동으로 추가 할 수 있습니까? 가능하다면 BindToLINQ() 함수는 테이크 (Take), 스킵 (Skip) 등과 같은 액션을 추가로 가정했습니다. – L2Eer
물론입니다. BindToLINQ 메서드를 사용할 때 (앞서 언급 한 두 가지 방법 중 하나) GridView는 해당 LINQ 명령 (Take, Skip 등) 자체를 수행합니다. 즉 수동으로 수행 할 필요가 없습니다. 제공된 코드를 사용하고 SQL Server 프로파일 러를 통해 필요한 쿼리를 확인하십시오. – Mikhail