Announcement

Collapse
No announcement yet.

LINQ ShortDate und Dinstinct

Collapse
X
  • Filter
  • Time
  • Show
Clear All
new posts

  • LINQ ShortDate und Dinstinct

    Hallo,

    ich stehe vor zwei Probleme bei einer Linq-Statement, die sich nicht so einfach lösen lassen.

    1. Extrahieren von ShortDate von einem DateTime. Aus dem "01.06.2014 12.23.000" soll nur das "01.06.2014" zurückgegebn werden.
    2. Distinct und Sort. Ich bekomme per ToList eine Liste von Daten. Distinct und Orderby haben da keine Wirkung.

    Leider hat Linq anscheint Probleme mit allen Arten von ToString()-Methoden

    Code:
    var query = (from f in _db.MyTable.Where(c => query.Contains(c.myId))
                      orderby f.myDate
                      select new {
                            datum = f.TimeStamp.ToShortDateString()
                     }).Distinct().ToList();
    
    oder
    
    var query = (from f in _db.MyTable.Where(c => query.Contains(c.myId))
                      orderby f.myDate
                      select f.TimeStamp.ToShortDateString()).Distinct().ToList();
    
    
    'LINQ to Entities' erkennt die Methode 'System.String ToString(System.String, System.IFormatProvider)' nicht, und diese Methode kann nicht in einen Speicherausdruck übersetzt werden.
    Hat jeman eine Idee?

    Gruß

    Gruß

  • #2
    Der entscheidende Baustein wird wohl EntityFunctions sein.
    Und du willst bestimmt erst den Distinct ausführen und dann sortieren.

    [Highlight=C#]var query = (from f in _db.MyTable
    where query.Contains(f.myId)
    select new { date = EntityFunctions.TruncateTime(f.OrderDate) })
    .Distinct().OrderBy(x=> x);[/Highlight]

    Comment


    • #3
      Hallo Ralf,

      vielen Dank für deine Antwort. Es funktioniert nun einwandfrei. Das Problem, das ich mit der "EntityFunctions.TruncateTime"-Methode hatte/habe, war, dass zwar der Time-Bereich abgeschnitten wird, die nullen bleiben aber noch bestehen "01.06.2014 00.00.00". Kann man irgendwie die nullen loswerden?

      Da ich das Ergebnis in eine Auswahlliste reinschreiben muss, habel ich versucht, das Ergebnis als eine SelectListItem-Liste zurückzugeben und habe folgendes ausprobiert:

      Code:
       
                      var test = (_db.MyTable.Where(c => query.Contains(c.Id))
                          .Select(f => new SelectListItem()
                          {
                              Text = EntityFunctions.TruncateTime(f.TimeStamp).ToString(),
                              Value = EntityFunctions.TruncateTime(f.TimeStamp).ToString()
                          })).Distinct().OrderBy(x => x).ToList();
      Natürlich habe ich hier auch wieder mal das Problem mit der "ToString()". Gibt es einen anderen Weg?

      Gruß

      Comment


      • #4
        Warum willst du überhaupt einen string daraus machen? Es ist in fast allen denkbaren Fällen schlecht es schon da zu machen. So wie jetzt wäre es je nach lokalen Formateinstellungen fürs Datum eine Katastrophe da ein Datum als string nur in ein paar Formaten noch sinnvoll sortierbar ist. Deutsches Standardformat gehört jedenfalls nicht dazu. Normalerweise würde ich dir raten es bei DateTime zu belassen und dann wenn du tatsächlich konkret einen string brauchst (zum export in ein Textformat zur Anzeige auf dem Bildschirm etc.) dann das Datum dort in einen string zu verwandeln der dem dortigen gewünschten Format entspricht.

        Comment


        • #5
          Eine MVC-Auswahlliste benötgt einen "Text" und einen "Wert" (Value). Beide müssen vom Typ String sein. Daher die Umwandlung. Das ist nur zu Anzeige. Wenn ein Datum ausgewählt ist, muss ich den String wieder in ein Datum umwandeln, um damit arbeiten zu können.

          Gruß

          Comment


          • #6
            Dann würde ich das Formatieren auch erst dann machen wenn du Query Result in die SelectList für die konkrete Anwendung umfüllst. Dann ist nebenbei auch klarer von wo den das Format dafür gezogen wird (vom Webserver oder mit Impersonation dann vom Client).
            Direkt an dem was das Model sein sollte schon Formatierungen vorzunehmen weil ein bestimmter View das so braucht fühlt sich falsch an. Das geht meist in die Hose wenn man sich nicht bewußt ist woher denn das zu benutztendr Format kommt.
            Von der Datenbank, dem Webserver, dem Client, noch jemand anderes der daran beteiligt ist?

            Comment

            Working...
            X