2016-04-04 8 views
0

Grundsätzlich habe ich ein Modell BalanceUsers mit Ausgaben und Einnahmen und eine Datumsspalte, was ich will Abfrage ist, dass Tabelle und Reihenfolge alle Zeilen nach Datum aufsteigend, ich muss das tun, so dass ich zwischen einem Startdatum und suchen kann ein endDate, das ich aus einem Formular sende, um Werte zwischen diesen beiden Daten zu erhalten, aber nichts ist passiert, vielleicht habe ich etwas falsch gemacht.Bestelldatum aufsteigend

Hier ist, was ich tat

[HttpPost] 
    public ActionResult Index(string startDate, string endDate) 
    { 
     DateTime data1 = DateTime.Parse(startDate); 
     DateTime data2 = DateTime.Parse(endDate); 

     var userId = User.Identity.GetUserId(); 
     decimal gastos = 0; 
     decimal rendimentos = 0; 

     var orderDates = db.BalanceUsers.Where(d => d.ApplicationUserId == userId).OrderBy(d => d.data); //this is what does the job 

     var lowestValue = orderDates.Where(d => d.ApplicationUserId == userId).Min(d => d.valor); 
     var BiggestDate = orderDates.Where(d => d.ApplicationUserId == userId).First(d => d.valor == lowestValue); 
     var dateBiggestDate = BiggestDate.data; 

     var biggestValue = orderDates.Where(d => d.ApplicationUserId == userId).Max(d => d.valor); 
     var biggestDate2 = orderDates.Where(d => d.ApplicationUserId == userId).First(d => d.valor == biggestValue); 
     var biggestDateEarning = biggestDate2.data; 
     foreach (var balance in orderDates.Where(d => d.ApplicationUserId == userId)) 
     { 
     if(balance.valor < 0) 
      { 
       expenses += balance.valor; 
      } 
     else 
      { 
       earnings += balance.valor; 
      } 
     } 
statistic model = new statistic() 
     { 
      utilizador = User.Identity.GetUserName(), 
      gastos = gastos, 
      rendimentos = rendimentos, 
      maiorValorDespesa = lowestValue, 
      dataMaiorDespesa = dataMaiorDespesa, 
      dataMaiorRendimento = dataMaiorRendimento, 
      maiorValorRendimento = biggestValue, 
     }; 

     return View(modelo); 

Meiner Ansicht i Anzeige nur die Daten, die mich auf mein Model-View übergeben, so dass ich glaube nicht, dass das Problem in der Ansicht ist.

PS: Sorry für mein schlechtes Englisch

+0

Ist 'data' die Eigenschaft, die den DateTime-Wert in' BalanceUser' speichert? Außerdem sehe ich keinen Code, wo Sie den Datumsfilter machen. – Shyju

Antwort

0

Für das nächste Mal oder wenn Sie weitere Hilfe wünschen

  1. Es wäre wirklich hilfreich, wenn Sie etwas übersetzen Ihres Codes Englisch tat. Ich habe keine Ahnung, was die Eigenschaften eigentlich bedeuten, also werde ich hier ein paar Vermutungen anstellen, basierend auf dem, was du geschrieben hast.
  2. Es würde auch helfen, wenn Sie Ihr Modell für das Objekt zur Verfügung stellen, mit dem Sie in Ihrer Methode arbeiten.
  3. Schließlich würde es helfen, wenn Sie beschreiben, was Sie erreichen möchten.

Das sagte ich Ihren Code geschaut und es scheint, dass Sie alles in dort mit nur 1 Aufruf tun können. Auch nicht wo in Ihrem Code verwenden Sie tatsächlich diese Daten, die übergeben werden. Auch warum geben Sie sie nicht als tatsächliche DateTime Objekte?

var highestLowestValors = db.BalanceUsers.Where(d => d.ApplicationUserId == userId) 
    .GroupBy(x => x.ApplicationUserId) 
    .Select(x => new { 
     biggestValor = x.Max(y => y.valor), 
     lowestValor = x.Min(y => y.valor), 
     expenses = x.Where(y => y.valor < 0).Sum(y => y.valor), 
     earnings = x.Where(y => y.valor > 0).Sum(y => y.valor), 
    }).Single(); 

ich brauche, dass soo tun i zwischen einem startdate und einem endDate

Erste SQL ist eine declaritive Sprache suchen. Dies bedeutet, dass Sie die Daten nicht bestellen müssen und sie dann durchlaufen müssen, um das zu erhalten, was Sie brauchen. Erklären Sie stattdessen, dass Sie nur Daten zwischen diesen beiden Daten haben möchten. Sagen wir, Ihre Datumsspalte für Ihre Tabelle BalanceUsers heißt OccurredOn, Sie würden die Abfrage so ändern.

DateTime startDateSearch, endDateSearch; // assign these values somewhere 
var highestLowestValors = db.BalanceUsers.Where(d => d.ApplicationUserId == userId && d.OccurredOn >= startDateSearch && d.OccurredOn <= endDateSearch) 
    .GroupBy(x => x.ApplicationUserId) 
    .Select(x => new { 
     biggestValor = x.Max(y => y.valor), 
     lowestValor = x.Min(y => y.valor), 
     expenses = x.Where(y => y.valor < 0).Sum(y => y.valor), 
     earnings = x.Where(y => y.valor > 0).Sum(y => y.valor), 
    }).Single(); 
+0

gute Antwort, und Entschuldigung für schlechte Übersetzung ich bin irgendwie neu auf .Net mvc, können Sie mir erklären, dass OccuredOn, weil es nicht funktioniert hier, wo hast du das? –

+0

oh bereits wissen :) –

+0

@FilipeCosta - Sie erwähnten, Sie wollten auf ein Gleichgewicht Datum filtern, aber Sie haben nie erwähnt, was Ihre Eigenschaft benannt wurde. Ich nahm eine Vermutung (ich erwähnte das oben) und nannte es einfach "OccurredOn". Sie können das ändern, wie auch immer Ihre Spalte tatsächlich aufgerufen wird. – Igor

Verwandte Themen