2010-10-06 5 views
2

Je suis en train de calculer la somme de la différence de deux colonnes:Somme la différence de deux colonnes dans Entity Framework

var result = model.TableExample 
        .Where(condition here) 
        .Select(s => s.Column1 - s.Column2) 
        .Sum(); 

mais il est en hausse une exception:

Index et la longueur doit se référer à un emplacement dans la chaîne

Je ne peux pas comprendre ceci. Il n'y a aucune chaîne nulle part, les colonnes sont entières dans le modèle et la base de données. Y a-t-il quelque chose qui ne va pas? J'utilise le fournisseur MySql.

+2

Pouvez-vous publier la trace de pile complète de l'exception? – dtb

+0

est le résultat unique ou plusieurs lignes? – Mouhannad

Répondre

4

Cela ressemble à un bogue dans le fournisseur MySQL Linq ... L'erreur provient probablement des manipulations de chaînes internes dans le fournisseur.

Vous pouvez essayer de contourner le problème en récupérant les lignes et calculer la somme en mémoire, comme ceci:

var result = model.TableExample 
       .Where(condition here) 
       .Select(s => s.Column1 - s.Column2) 
       .AsEnumerable() 
       .Sum(); 

Ou ceci:

var result = model.TableExample 
       .Where(condition here) 
       .AsEnumerable() 
       .Sum(s => s.Column1 - s.Column2); 

Notez que la performance souffrira si les Il y a beaucoup de lignes, car ce code récupère chaque ligne au lieu de simplement aller chercher la somme.

+0

Cela peut-il être fait dans une colonne de modèle GridView Eval? –