@@ -41,6 +41,9 @@ public class DataTablesResult<T> : DataTablesResult
4141 {
4242
4343 }
44+
45+
46+
4447 public class DataTablesResult < T , TRes > : DataTablesResult < TRes >
4548 {
4649 private readonly Func < T , TRes > _transform ;
@@ -90,24 +93,29 @@ private DataTablesData GetResults(IQueryable<T> data, DataTablesParam param, Tup
9093 var filters = new DataTablesFilter ( ) ;
9194
9295
93- var dataArray = data . Select ( _transform ) . AsQueryable ( ) ;
94- dataArray = filters . FilterPagingSortingSearch ( param , dataArray , searchColumns ) . Cast < TRes > ( ) ;
95-
96+ var filteredData = data . Select ( _transform ) . AsQueryable ( ) ;
97+ filteredData = filters . FilterPagingSortingSearch ( param , filteredData , searchColumns ) . Cast < TRes > ( ) ;
98+
99+ var page = filteredData . Skip ( param . iDisplayStart ) ;
100+ if ( param . iDisplayLength > - 1 )
101+ {
102+ page = page . Take ( param . iDisplayLength ) ;
103+ }
104+
96105 var type = typeof ( TRes ) ;
97106 var properties = type . GetProperties ( ) ;
98107
99- var toArrayQuery = from i in dataArray
108+ var transformedPage = from i in page
100109 let pairs = properties . Select ( p => new { p . PropertyType , Value = ( p . GetGetMethod ( ) . Invoke ( i , null ) ) } )
101110 let values = pairs . Select ( p => GetTransformedValue ( p . PropertyType , p . Value ) )
102111 select values ;
103112
104- IEnumerable < object > [ ] aaData = toArrayQuery . ToArray ( ) ;
105113 var result = new DataTablesData
106114 {
107115 iTotalRecords = totalRecords ,
108- iTotalDisplayRecords = aaData . Length ,
116+ iTotalDisplayRecords = filteredData . Count ( ) ,
109117 sEcho = param . sEcho ,
110- aaData = aaData
118+ aaData = transformedPage . ToArray ( )
111119 } ;
112120
113121 return result ;
0 commit comments