none
Linq : Parameter schönere Lösung gesucht RRS feed

  • Frage

  • Hallo zusammen ,

     

    folgender Code ist  gegeben :

    private void GetStat()
     {
      var e = from i in db.Data
       from s in db.Campaign
       join d in db.Tracker on i.intTrackNu equals d.Data.intTrackNuinto custTracker
    where s.DM_Auftrag_ID == i.Campaign && s.active.Value == 1 where !i.Stat.Equals("10") && !i.Stat.Equals("100") select new DetailViewItem() { kdnr = i.KdNr, intTrackNu= i.intTrackNu, kampagne = i.Campaign, status = i.Stat, Date= i.Date.Value, messages = custTracker.Select(p => p) }; if (!string.IsNullOrEmpty(_kampagne)) e = e.Where(p => p.kampagne == _kampagne); if (!string.IsNullOrEmpty(_status)) e = e.Where(p => p.status.Equals(_status)); if (_date.HasValue) e = e.Where( p => p.Date.Month == _date.Value.Month && p.Date.Day == _date.Value.Day && p.Date.Year == _date.Value.Year); }

     

    Wie Ihr seht, eine unschöne Lösung.

    Leider habe ich für Linq keine bessere Lösung gefunden, jmd ne Idee ? (Ausser es in mehrere versch.Methoden zu kapseln)

    Grüße

    Montag, 20. September 2010 13:24

Alle Antworten

  • Hallo

    Die Prüfung mit _date.HasValue

    if
    
     (_date.HasValue)
     e =
     e.Where(
     p =>
     p.Date.Month == _date.Value.Month && p.Date.Day == _date.Value.Day &&
     p.Date.Year == _date.Value.Year);
    
    
    kannst Du etwas straffen zu:

     

    e = e.Where(
     p => !_date.HasValue || p.Date.Day == _date.Value.Day);
    

    Where-clauses zu kamapgane und status gibt's ja je zweimal, einmal 'inline'
    und später nochmals bezogen auf die Felder _status und _kampagne.
    Das könnte man jeweils zusammenführen und den Select dann ganz ans Ende stellen.

    messages = custTracker.Select(p => p)
    
    
    ist eigentlich (fast) dasselbe wie:
    messages = custTracker
    //bzw messages = custTracker.AsEnumerable()

    Gruß,
    Christoph

    Montag, 20. September 2010 14:32