2016-09-10 38 views
1

Je sais qu'il y a plusieurs autres articles sur cette exception mais aucun d'eux ne m'a aidé.Au moins un objet doit implémenter IComparable - travailler sur la machine locale mais pas sur le serveur

Chacune des 3 Solutions fonctionne sur ma machine locale mais pas sur Live-System/Sur le serveur. Lorsque le nombre de PackageViewModels a augmenté, la première solution a quitté le travail. - Mise en œuvre de la deuxième solution. Les utilisateurs ont ajouté deux éléments supplémentaires et la deuxième solution a également quitté le travail - Mis en œuvre troisième, qui n'a jamais travaillé sur le serveur. : D

EDIT: - Un peu plus d'informations ... Les fonctions GetTemplateTypes(), GetTemplateCategories() et GetPackages() sont de retour des listes de modèles qui sont interrogeables via ADO.net SQL brut de SQL Server 2008. Ces fonctions sont toujours renvoyant les données demandées et il n'y a jamais aucune sorte d'exception jetant.

public ActionResult Package_Read([DataSourceRequest] DataSourceRequest request) 
    { 
     try 
     { 
      var templateTypes = DBRepository.GetTemplateTypes(); 
      var templateCategories = DBRepository.GetTemplateCategories(); 
      var templatePackages = DBRepository.GetPackages(); 

// Third Solution, never worked 

      List<PackageViewModel> packageViewModels = new List<PackageViewModel>(); 

      foreach (var templatePackage in templatePackages) 
      { 
       PackageViewModel packageViewModel = new PackageViewModel(); 
       packageViewModel.val1= templatePackage.val1; 
       packageViewModel.val2= templatePackage.val2; 
       packageViewModel.ID = templatePackage.ID; 
       packageViewModel.Type = 
        (from t in templateTypes where t.ID == templatePackage.ID select t).First(); 
       packageViewModel.Category = (from t in templateCategories 
        where t.Category_ID == templatePackage.Category_ID 
        select t).First(); 
       packageViewModels.Add(packageViewModel); 
      } 


// Second Soltuion - Worked for an amount up to 14 packageViewModels 

      var packageViewModels = templatePackages.Select(p => new PackageViewModel 
      { 
       VPackage_ID = p.VPackage_ID, 
       VType = (from t in templateTypes where t.ID == p.VType_ID select t).Single(), 
       VCategory = (from t in templateCategories 
        where t.VCategory_ID == p.VCategory_ID select t).Single(), 
       val1 = p.val1, 
       val2 = p.val2 
      }).ToList(); 




// First Solution - Worked till a specific number of PackageViewModels (about 12) 

      IEnumerable<PackageViewModel> packages = DBRepository.GetPackages() 
       .Select(p => new PackageViewModel 
       { 
        VPackage_ID = p.VPackage_ID, 
        VType = DBRepository.GetTemplateType(p.VType_ID), 
        VCategory = DBRepository.GetTemplateCategory(p.VCategory_ID), 
        val1 = p.val1, 
        val2 = p.val2, 
       }); 


      var jsonResult = Json(packageViewModels.ToDataSourceResult(request), JsonRequestBehavior.AllowGet); 
      jsonResult.MaxJsonLength = int.MaxValue; 
      return jsonResult; 
     } 
     catch (Exception ex) 
     { 
      Util.logger.Error(ex.Message); 
      return new JsonResult(); 
     } 
    } 

Je n'ai absolument aucune idée de comment gérer cela.

Merci d'avance!

+0

D'où provient l'erreur? Lorsque vous testez en local, utilisez-vous la même source de données qu'en cas d'échec? Pourriez-vous poster la trace de la pile de l'erreur? – swestner

Répondre

1
ERROR 2016-09-12 16:09:28,695 890063ms Util     Package_Read    
At least one object must implement IComparable 
ERROR 2016-09-12 16:09:28,696 890064ms Util     Package_Read   - mscorlib 
ERROR 2016-09-12 16:09:28,697 890065ms Util     Package_Read    
at System.Collections.Comparer.Compare(Object a, Object b) 
at System.Collections.Generic.ObjectComparer`1.Compare(T x, T y) 
at System.Linq.EnumerableSorter`2.CompareKeys(Int32 index1, Int32 index2) 
at System.Linq.EnumerableSorter`2.CompareKeys(Int32 index1, Int32 index2) 
at System.Linq.EnumerableSorter`1.QuickSort(Int32[] map, Int32 left, Int32 right) 
at System.Linq.EnumerableSorter`1.Sort(TElement[] elements, Int32 count) 
at System.Linq.OrderedEnumerable`1.<GetEnumerator>d__1.MoveNext() 
at System.Linq.Enumerable.<SkipIterator>d__30`1.MoveNext() 
at Kendo.Mvc.Extensions.QueryableExtensions.Execute[TModel,TResult](IQueryable source, Func`2 selector) 
at Kendo.Mvc.Extensions.QueryableExtensions.CreateDataSourceResult[TModel,TResult](IQueryable queryable, DataSourceRequest request, ModelStateDictionary modelState, Func`2 selector) 
at Kendo.Mvc.Extensions.QueryableExtensions.ToDataSourceResult(IQueryable queryable, DataSourceRequest request, ModelStateDictionary modelState) 
at Kendo.Mvc.Extensions.QueryableExtensions.ToDataSourceResult(IQueryable enumerable, DataSourceRequest request) 
at Kendo.Mvc.Extensions.QueryableExtensions.ToDataSourceResult(IEnumerable enumerable, DataSourceRequest request) 

erreur a été jeté à

var jsonResult = Json(packageViewModels.ToDataSourceResult(request), JsonRequestBehavior.AllowGet); 

trouvé une solution, a changé le tri de la grille UI kendo dans la vue. Je ne comprends toujours pas pourquoi différentes solutions fonctionnaient. Il semble que tout fonctionne maintenant.