1- using Mvc . JQuery . Datatables . Models ;
2- using Mvc . JQuery . Datatables . Reflection ;
3- using Mvc . JQuery . Datatables . Util ;
1+ using System . Web ;
2+ using System . Web . Script . Serialization ;
43using System ;
54using System . Collections . Generic ;
65using System . Linq ;
7- using System . Web ;
86using System . Web . Mvc ;
9- using System . Web . Script . Serialization ;
7+ using Mvc . JQuery . Datatables . Models ;
8+ using Mvc . JQuery . Datatables . Reflection ;
9+ using Mvc . JQuery . Datatables . Util ;
1010
1111namespace Mvc . JQuery . Datatables
1212{
@@ -18,83 +18,60 @@ public abstract class DataTablesResult : ActionResult
1818 /// <param name="dataTableParam"></param>
1919 /// <param name="transform">//a transform for custom column rendering e.g. to do a custom date row => new { CreatedDate = row.CreatedDate.ToString("dd MM yy") } </param>
2020 /// <returns></returns>
21- public static DataTablesResult < TSource > Create < TSource , TTransform > ( IQueryable < TSource > q , DataTablesParam dataTableParam ,
22- Func < TSource , TTransform > transform , ArrayOutputType ? arrayOutput = null )
21+ public static DataTablesResult < TSource > Create < TSource , TTransform > ( IQueryable < TSource > q , DataTablesParam dataTableParam , Func < TSource , TTransform > transform )
2322 {
2423 var result = new DataTablesResult < TSource > ( q , dataTableParam ) ;
25-
2624 result . Data = result . Data
2725 . Transform < TSource , Dictionary < string , object > > ( row => TransformTypeInfo . MergeTransformValuesIntoDictionary ( transform , row ) )
28- . Transform < Dictionary < string , object > , Dictionary < string , object > > ( StringTransformers . StringifyValues ) ;
29-
30- result . Data = ApplyOutputRules ( result . Data , arrayOutput ) ;
26+ . Transform < Dictionary < string , object > , Dictionary < string , object > > ( StringTransformers . StringifyValues )
27+ . Transform < Dictionary < string , object > , object [ ] > ( d => d . Values . ToArray ( ) ) ;
3128
3229 return result ;
3330 }
3431
35- public static DataTablesResult < TSource > Create < TSource > ( IQueryable < TSource > q , DataTablesParam dataTableParam ,
36- ArrayOutputType ? arrayOutput = null )
32+ public static DataTablesResult < TSource > Create < TSource > ( IQueryable < TSource > q , DataTablesParam dataTableParam )
3733 {
3834 var result = new DataTablesResult < TSource > ( q , dataTableParam ) ;
3935
4036 result . Data = result . Data
4137 . Transform < TSource , Dictionary < string , object > > ( DataTablesTypeInfo < TSource > . ToDictionary )
42- . Transform < Dictionary < string , object > , Dictionary < string , object > > ( StringTransformers . StringifyValues ) ;
43-
44- result . Data = ApplyOutputRules ( result . Data , arrayOutput ) ;
45-
38+ . Transform < Dictionary < string , object > , Dictionary < string , object > > ( StringTransformers . StringifyValues )
39+ . Transform < Dictionary < string , object > , object [ ] > ( d => d . Values . ToArray ( ) ) ; ;
4640 return result ;
4741 }
4842
49- private static DataTablesData ApplyOutputRules ( DataTablesData sourceData , ArrayOutputType ? arrayOutput = null )
50- {
51- DataTablesData outputData = sourceData ;
52-
53- switch ( arrayOutput )
54- {
55- case ArrayOutputType . ArrayOfObjects :
56- // Nothing is needed
57- break ;
58- case ArrayOutputType . BiDimensionalArray :
59- default :
60- outputData = sourceData . Transform < Dictionary < string , object > , object [ ] > ( d => d . Values . ToArray ( ) ) ;
61- break ;
62- }
63-
64- return outputData ;
65- }
6643
6744 /// <param name="transform">Should be a Func<T, TTransform></param>
68- public static DataTablesResult Create ( IQueryable queryable , DataTablesParam dataTableParam , object transform ,
69- ArrayOutputType ? arrayOutput = null )
45+ public static DataTablesResult Create ( IQueryable queryable , DataTablesParam dataTableParam , object transform )
7046 {
7147 var s = "Create" ;
7248 var openCreateMethod = typeof ( DataTablesResult ) . GetMethods ( ) . Single ( x => x . Name == s && x . GetGenericArguments ( ) . Count ( ) == 2 ) ;
7349 var queryableType = queryable . GetType ( ) . GetGenericArguments ( ) [ 0 ] ;
7450 var transformType = transform . GetType ( ) . GetGenericArguments ( ) [ 1 ] ;
7551 var closedCreateMethod = openCreateMethod . MakeGenericMethod ( queryableType , transformType ) ;
76- return ( DataTablesResult ) closedCreateMethod . Invoke ( null , new object [ ] { queryable , dataTableParam , transform , arrayOutput } ) ;
52+ return ( DataTablesResult ) closedCreateMethod . Invoke ( null , new object [ ] { queryable , dataTableParam , transform } ) ;
7753 }
7854
79- public static DataTablesResult Create ( IQueryable queryable , DataTablesParam dataTableParam ,
80- ArrayOutputType ? arrayOutput = null )
55+ public static DataTablesResult Create ( IQueryable queryable , DataTablesParam dataTableParam )
8156 {
8257 var s = "Create" ;
8358 var openCreateMethod = typeof ( DataTablesResult ) . GetMethods ( ) . Single ( x => x . Name == s && x . GetGenericArguments ( ) . Count ( ) == 1 ) ;
8459 var queryableType = queryable . GetType ( ) . GetGenericArguments ( ) [ 0 ] ;
8560 var closedCreateMethod = openCreateMethod . MakeGenericMethod ( queryableType ) ;
86- return ( DataTablesResult ) closedCreateMethod . Invoke ( null , new object [ ] { queryable , dataTableParam , arrayOutput } ) ;
61+ return ( DataTablesResult ) closedCreateMethod . Invoke ( null , new object [ ] { queryable , dataTableParam } ) ;
8762 }
8863
89- public static DataTablesResult < T > CreateResultUsingEnumerable < T > ( IEnumerable < T > q , DataTablesParam dataTableParam ,
90- ArrayOutputType ? arrayOutput = null )
64+ public static DataTablesResult < T > CreateResultUsingEnumerable < T > ( IEnumerable < T > q , DataTablesParam dataTableParam )
9165 {
92- return Create ( q . AsQueryable ( ) , dataTableParam , arrayOutput ) ;
66+ return Create ( q . AsQueryable ( ) , dataTableParam ) ;
9367 }
68+
9469 }
9570
71+
9672 public class DataTablesResult < TSource > : DataTablesResult
9773 {
74+
9875 public DataTablesData Data { get ; set ; }
9976
10077 internal DataTablesResult ( IQueryable < TSource > q , DataTablesParam dataTableParam )
@@ -110,20 +87,18 @@ public override void ExecuteResult(ControllerContext context)
11087 {
11188 if ( context == null )
11289 throw new ArgumentNullException ( "context" ) ;
113-
11490 HttpResponseBase response = context . HttpContext . Response ;
11591
11692 var scriptSerializer = new JavaScriptSerializer ( )
11793 {
11894 MaxJsonLength = int . MaxValue
11995 } ;
120-
12196 response . Write ( scriptSerializer . Serialize ( this . Data ) ) ;
12297 }
12398
12499 DataTablesData GetResults ( IQueryable < TSource > data , DataTablesParam param )
125100 {
126- var totalRecords = data . Count ( ) ; // annoying this, as it causes an extra evaluation..
101+ var totalRecords = data . Count ( ) ; //annoying this, as it causes an extra evaluation..
127102
128103 var filters = new DataTablesFiltering ( ) ;
129104
@@ -134,6 +109,7 @@ DataTablesData GetResults(IQueryable<TSource> data, DataTablesParam param)
134109
135110 var skipped = filteredData . Skip ( param . iDisplayStart ) ;
136111 var page = ( param . iDisplayLength <= 0 ? skipped : skipped . Take ( param . iDisplayLength ) ) . ToArray ( ) ;
112+
137113
138114 var result = new DataTablesData
139115 {
@@ -145,5 +121,7 @@ DataTablesData GetResults(IQueryable<TSource> data, DataTablesParam param)
145121
146122 return result ;
147123 }
124+
125+
148126 }
149127}
0 commit comments