2016-07-09 18 views
-1

Ich möchte nur eine einfache Summe tun, wie ich in SQL getan hätte. Ich benutze übrigens EF6 und T4-Vorlagen, wenn das einen Unterschied macht. Datenbank Erstes Design.Kann nicht auf Summenfunktion in linq zugreifen

Select SUM (Zahlungen) aus tblPayemtns wo CustomerNo = 2322

Ich dachte, es wäre eine Sache gewesen, so etwas wie dies zu tun.

var _myPayments = from c in portalEntities.tblPortalPayments.Where(p => p.userId == _userID) 
          group by c.paymentDate 
          select new 
          { 
           Sum = 
          }; 

Aber ich kann nicht scheinen, den Zugriff auf die Summe arggergate Funktion zu erhalten, wenn ich c.Sum gehe sein in der Liste nicht nur eh Feldnamen sind verfügbar ich bin ich meine Linq Aufruf falsch Lage sein, dies zu tun, was Ich will ist Summe = Summe (c.paymentsToDate).

Bevor jemand fragt und ich no sie gut das ist meine Portal entties Funktion es gibt nur eine neue instance von Entitäten für mich, um meinen Code sauber zu halten.

public portalEntities _portalEntities; 
    public portalEntities portalEntities 
    { 
     get 
     { 
      if (_portalEntities == null) 
      { 
       try 
       { 
        _portalEntities = new portalEntities(); 
       } 
       catch (Exception ex) 
       { 
       } 
      } 

      return _portalEntities; 
} 
+0

ich dieses questio für eine Prämie i sein Avial nicht wollen, glaube nicht, dass es die Option warnt, wie kann ich das sortieren? – rogue39nin

Antwort

2

Sie müssen nur die gruppierte Ergebnis für die Zahlung Spalte zusammenzufassen:

var _myPayments = from c in portalEntities.tblPortalPayments 
              .Where(p => p.userId == _userID) 
        group c by c.paymentDate into g 
        select new 
        { 
         Sum = g.Sum(x=>x.Payment) 
        }; 

Mehr einfacher Weg ist, die Spalte und dann Summieren die Zeilen auszuwählen, indem durch Klausel die unnötige Gruppe verlassen :

var Sum = (from c in portalEntities.tblPortalPayments 
            .Where(p => p.userId == _userID) 
      select c.Payment).Sum(); 

oder eine andere Art und Weise sein kann:

var Sum = portalEntities.tblPortalPayments 
         .Where(p => p.userId == _userID) 
         .Sum(x=>x.Payment); 
+0

Vielen Dank, wie würde ich das Int von der zurückgeben, da alles, was ich tun möchte ist, dass der Wert innerhalb der Methode – rogue39nin

+0

@david Ich habe den Beitrag –

+0

aktualisiert Vielen Dank können Sie erklären, warum Sie das tun müssen Gruppe von ich überzeuge es ein Thow zurück zu alten sql – rogue39nin

0

Sie könnten smth wie folgt tun:

var _myPayments = 
     from c in portalEntities.tblPortalPayments.Where(p => p.userId == _userID) 
     group by c.paymentDate 
     select new 
     { 

     }.Sum(); 

Sie können auch die Verwendung von Lambda-Ausdrücke, um die Abfrage zu tun:

var _myPayments = portalEntities.tblPortalPayments.Where(p => p.userId == _userID).Sum(x => x.Payments); 
Verwandte Themen