Mehrere Suchparameter mit LINQ

Ich bin das schreiben, was ich glauben sollte ein relativ straight-forward-Windows Form app. Ich bin mit LINQ to SQL, aber ich habe es nie benutzt, bevor. Wir haben eine SQL Server-Datenbank, und ich bin die Schaffung eines front-end-Zugriff auf die Datenbank. Ich versuche, herauszufinden, den effizientesten Weg zu suchen, für mehrere (beliebig viele) Suche nach Parametern mit ihm.

In der windows-form, die ich erstellen ein Wörterbuch mit jeder Suche Schlüssel und dessen Wert zu suchen, und übergeben Sie in meine search () - Methode. Ich versuche einen Weg zu finden, um die Datenbank zu durchsuchen, die mit jeder dieser Schlüssel und die dazugehörigen Werte. Hier ist, was ich versuche zu tun:

public IQueryable<Product> Search(Dictionary<string, string> searchParams)
{
   DBDataContext dc = new DBDataContext();
   var query = dc.Products;

   foreach (KeyValuePair<string, string> temp in searchParams)
   {
      query = query.Where(x => x.(temp.Key) == temp.Value);
   }

   return query;
}

Merke ich, dass syntaktisch x.(temp.Schlüssel) ist falsch, aber ich hoffe, das veranschaulicht, was ich versuche zu tun. Ich Frage mich, ob es einen anderen Weg zu gehen über das, was ich versuche zu tun, ohne zu tun, eine riesige switch-Anweisung (if/else if-Struktur).

BEARBEITEN

So, ich überarbeitete es ein wenig, aber ich bin immer noch Probleme mit ihm. Hier ist, was ich derzeit habe:

public IQueryable<Product> Search(Dictionary<string, string> searchParams)
{
    DBDataContext dc = new DBDataContext();

    string sQuery = "";
    foreach (KeyValuePair<string, string> temp in searchParams)
    {
        sQuery += temp.Key + "=" + temp.Value + " AND ";
    }

    var query = dc.Products.Where(sQuery);

    return query;
}

Entsprechend der LINQ Dynamic Query Library-Artikel, das sollte OK sein. Hier ist der Fehler, die ich immer bin:

Den Typ der Argumente für die Methode 'System.Linq -.Queryable.Wo(System.Linq -.IQueryable, System.Linq -.Ausdrücke.Ausdruck>)' kann nicht abgeleitet werden aus der Nutzung. Versuchen Sie, den Typ der Argumente explizit.

  • Gibt es einen Grund, dass die Such-parameter der Methode muss ein Wörterbuch eher als eine Func - <Produkt -, bool> ???
  • Nicht ganz sicher, was du damit meinst... könntest du das bitte klären?
  • Jeden Schlüssel im dictionary enthält die Parameter für die Suche (und jedem Parameter Wert zu suchen).
  • Gemäß Ihrer dynamischen Abfrage-generator Beispiel, ich habe einen edit in Bezug auf das "UND" am Ende unten, das wird sich hoffentlich lösen es für Sie.
InformationsquelleAutor jnevelson | 2010-10-28
Schreibe einen Kommentar