2010-04-26 5 views
0

Ceci est mon code. J'ai obtenu cet échantillon sur Internet et j'ai essayé de le modifier.ASP NET MVC Erreur dans la fonction

private void FillGridData() 
    { 
     //IQueryable<SVC> query = _customerService.GetQueryable(); 

     _dataContext = new dbServiceModelDataContext(); 
     var query = from m in _dataContext.SVCs 
        select m; 

     query = AddQuerySearchCriteria(query, _grid.SearchForm); 

     int totalRows = query.Count(); 
     _grid.Pager.Init(totalRows); 

     if (totalRows == 0) 
     { 
      _grid.Data = new List<SVC>(); 
      return; 
     } 

     query = AddQuerySorting(query, _grid.Sorter); 
     query = AddQueryPaging(query, _grid.Pager); 

     List<SVC> customers = query.ToList(); //***ERROR IN HERE***// 
     _grid.Data = customers; 
    } 

L'erreur dit "Impossible de commander par type 'System.Object'.", Quelle est la question? Avez-vous une solution pour moi?

Ceci est la méthode AddQuerySorting le problème est dans ICI
est là quelque chose de mal sur le code? :(

private IQueryable<SVC> AddQuerySorting(IQueryable<SVC> query, Sorter sorter) 
    { 
     if (String.IsNullOrEmpty(sorter.SortField)) 
      return query; 

     //Used approach from http://www.singingeels.com/Articles/Self_Sorting_GridView_with_LINQ_Expression_Trees.aspx 
     //instead of a long switch statement 
     var param = Expression.Parameter(typeof(SVC), "customer"); 
     var sortExpression = Expression.Lambda<Func<SVC, object>> 
           (Expression.Convert(Expression.Property(param, sorter.SortField), typeof(object)), param); 

     if (sorter.SortDirection == SortDirection.Asc) 
      query = query.OrderBy(sortExpression); 
     else 
      query = query.OrderByDescending(sortExpression); 

     return query; 
    } 

ici est AddQueryPaging Méthode

private IQueryable<SVC> AddQueryPaging(IQueryable<SVC> query, Pager pager) 
    { 
     if (pager.TotalPages == 0) 
      return query; 

     query = query.Skip((pager.CurrentPage - 1) * pager.PageSize) 
          .Take(pager.PageSize); 
     return query; 
    } 

Sorter

using System; 
    using System.Collections.Generic; 
    using System.Collections.Specialized; 
    using System.Linq; 
    using System.Web; 

    namespace MvcGridSample.ViewModels.Shared 
    { 

     public enum SortDirection 
     { 
      Asc = 1, 
      Desc = 2 
     } 


     public class Sorter 
     { 
      //Properties 
      public string SortField { get; set; } 
      public SortDirection SortDirection { get; set; } 

      public Sorter() 
      { 
       this.SortDirection = SortDirection.Asc; 
      } 


      public Sorter(string sortField, SortDirection sortDirection) 
      { 
       Verify.Argument.IsNotEmpty(sortField, "sortField"); 
       Verify.Argument.IsNotEmpty(sortField, "sortDirection"); 

       this.SortField = sortField; 
       this.SortDirection = sortDirection; 
      } 


      public void AddToQueryString(NameValueCollection queryString) 
      { 
       queryString["Sorter.SortField"] = this.SortField; 
       queryString["Sorter.SortDirection"] = this.SortDirection.ToString(); 
      } 
     } 
    } 
+0

Vous devriez essayer d'accepter les réponses aux questions qui vous ont aidé. C'est la bonne façon de faire les choses, et encourage les autres à vous aider ... –

+1

Qu'y a-t-il à l'intérieur de la fonction AddQueryPaging? – zerkms

+0

La fonction AddQueryPaging est une fonction qui rend les données affichées dans la grille composée de plusieurs pages comme ceci < << pages > >> – RahdixC9

Répondre

0

Regardez la ligne.

var sortExpression = Expression.Lambda<Func<SVC, object>> 

Cela devrait immédiatement sauter comme la cause la généré Expressiondoit être typé approprié. Ce type de métaprogrammation implique souvent soit l'utilisation de l'API non générique, soit l'utilisation de la réflexion pour créer le type correct à la volée. Heureusement, un exemple approprié is here. Vous devriez être en mesure d'utiliser cette approche re MakeGenericMethod (ou plus simple: il suffit d'utiliser le code "tel quel" de l'intérieur AddQuerySorting).

+0

M. Gravel encore ... :) – RahdixC9

+0

Mr Gravell ... je continue de me tromper en manipulant le code comme vous l'avez dit J'ai mis à jour ma question en ajoutant Sorter unction..any solution ?? – RahdixC9

Questions connexes