Frage

In LINQ to SQL-i wie dies tun können:

var q = db.Colors;
if(! string.IsNullOrEmpty(colorName))
   q = q.Where(c=>c.Name.Equals(colorName));
return q.ToList();

In DB4O Linq kann ich es nicht so tun, weil ich mit beginnen

var q = (from Color c in db
         select c);
if(! string.IsNullOrEmpty(colorName))
   q = q.Where(c=>c.Name.Equals(colorName));
return q.ToList();

Dies führt zu

  1. eine vollständige Aufzählung aller Farben
  2. ein Filter mit Namen.

Das ist nicht die Lösung, die ich wurde vom Kurs abgekommen Ziel. Irgendwelche Vorschläge?

War es hilfreich?

Lösung

Wäre so etwas wie diese geeignet?

return (from Color c in db
       where !String.IsNullOrEmpty(colorName) && c.Name.Equals(colorName)
       select c).ToList();

Sie können dann auch mehrere Parameter verwenden:

return (from Color c in db
       where (!String.IsNullOrEmpty(colorName) && c.Name.Equals(colorName))
          || (!String.IsNullOrEmpty(color1Name) && c.Name.Equals(color1Name))
          || (!String.IsNullOrEmpty(color2Name) && c.Name.Equals(color2Name))
          ...
       select c).ToList();

Andere Tipps

Ich bin nicht sicher, was Sie bekommen bei. Sind Sie, dass im ersten Fall einen Teil des Codes führt Server-Seite besorgt, so dass Sie die Werte wieder zu optimieren. Aber im zweiten Fall wird die Aufzählung lokal erfolgen, so dass keine Optimierung an den verwendeten Werten ist?

Wenn ja, gibt es keine Möglichkeit, dies zu Objekten mit LINQ zu vermeiden. Die Objekte sind im Speicher, so gibt es keine Möglichkeit gibt, durch sie zu vermeiden Aufzählen eine Filteroperation zu tun.

Was ist, wenn Sie spalten den Ausdruck:

IDb4oLinqQuery<Color> q;
if(! string.IsNullOrEmpty(colorName))
{
  q = from Color c in db
      where c.Name.Equals(colorName)
      select c;
}
else
{
  q = from Color c in db
      select c;
}
return q.ToList();

Auf diese Weise der DB4O Präprozessor 2 verschiedene LINQ-Abfragen sieht? Nachteil ist vom Kurs abgekommen diese Lösung viel ausführlicher und nicht genau DRY ..

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top