2013-03-13 7 views
1

J'ai quelques problèmes avec les wrappers MVC pour Kendo UI. Il semble que IEnumerable ne supporte aucune valeur d'agrégation autre que count. L'exception que j'obtiens est: Aucune méthode générique 'Sum' sur le type 'System.Linq.Enumerable' n'est compatible avec les arguments et les arguments de type fournis. Aucun argument de type ne doit être fourni si la méthode est non générique.Aucune méthode générique « Somme » du type « System.Linq.Enumerable » est compatible

Je ne suis pas sûr de savoir comment contourner ce problèmes je ne suis pas sûr que ce soit un défaut avec Kendo.

Veuillez noter que la fonction d'agrégat utilisée ci-dessous n'est pas LINQ par exemple mais ce que l'encapsuleur Kendo UI fournit en tant que fonction. S'il vous plaît voir Kendo UI Documentation pour plus d'informations.

Source de données:

  • Northwind

Controller:

public ActionResult Index() { return View(); } 
public ActionResult Read([DataSourceRequest] DataSourceRequest request) { return GetView(request); } 
private IEnumerable<dynamic> GetData() { var db = new NwEntities(); return db.Products; } 
private JsonResult GetView(DataSourceRequest request) { return Json(GetData().ToDataSourceResult(request)); } 

Vue:

@model IEnumerable<dynamic> 
@(
Html.Kendo().Grid(Model).Name("Grid") 
    .DataSource(ds => 
     ds.Ajax() 
     .Model(m => 
     { 
      m.Id("ProductID"); 
      m.Field("ProductName", typeof(string)); 
      m.Field("UnitPrice", typeof(decimal)); 
     }) 
     .Aggregates(aggregate => aggregate.Add(a => "UnitPrice").Count().Sum()) 
     .Read(r => r.Action("Read", "Home")) 
    ) 
    .Columns(columns => 
    { 
     columns.Bound("ProductID"); 
     columns.Bound("ProductName"); 
     columns.Bound("UnitPrice").Format("{0:c}"); 
    }) 
    .Groupable() 
) 
+2

'.Count(). Sum()' - '.Aggregates (...)' - ceux-ci ne sont tout simplement pas valides. –

+0

Je suppose que cela est causé par votre 'IEnumerable '. Pourquoi utilisez-vous 'IEnumerable ' du tout? Aussi je ne sais pas si les wrappers KendoUI le supportent ... Alors essayez de créer une classe Product avec les proProdicts ProductID, ProductName, UnitPrice pour voir si cela fonctionne. – nemesv

+1

@TimothyShields Le '.Count(). Sum()' n'est pas les méthodes Linq mais l'API de configuration de la grille de l'UI Kendo. Voir la [documentation.] (Http://docs.kendoui.com/getting-started/using-kendo-with/aspnet-mvc/helpers/grid/configuration) – nemesv

Répondre

1

C'est maintenant un problème connu avec Kendo UI et sera fixé par l'équipe UI Kendo

-1

Somme sans argument ne fonctionne que sur IEnumerables de la construction dans les types décimal, double, int, etc.

Pour appeler avec un type générique, vous devez fournir une fonction de transformation.

I.e.

enumerable.Sum(e => e.Value) 

où e.Value est ce que vous voulez faire.

également voir http://msdn.microsoft.com/en-us/library/system.linq.enumerable.sum.aspx

+0

Ceci est la fonction Sum() de Kendos et non LINQ –

+0

@MitchellSkurnik le message d'erreur concerne 'System.Linq.Enumerable'. Le compilateur vous dit d'où vient l'erreur et vous refusez d'écouter quiconque vous dit le contraire. Votre bibliothèque peut utiliser ces méthodes sous le capot à votre insu. De toute façon, .Count(). Sum() n'a aucun sens. –

+0

Ceux-ci proviennent de l'interface utilisateur de Kendo. .Count(). Sum() ajoute un agrégat renvoyé en tant que JSON. –

0

@MitchellSkurnik a reçu un asnwer here.

Questions connexes