Plusieurs paramètres de recherche avec LINQ

Je suis en train d'écrire ce que je pense devrait être relativement simple Formulaire Windows app. Je suis à l'aide de LINQ to SQL, mais je ne l'ai jamais utilisé avant. Nous avons une base de données SQL Server, et je suis de la création d'un front-end pour accéder à cette base de données. J'essaye de trouver le moyen le plus efficace pour rechercher plusieurs (nombre arbitraire de) paramètres de recherche.

Dans le formulaire windows, j'ai créer un dictionnaire avec chaque clé de recherche, et de sa valeur pour la recherche, et la passer dans ma méthode search (). Je suis en train d'essayer de trouver un moyen de recherche de la base de données avec chacune de ces clés et leurs valeurs associées. Voici ce que je suis en train de faire:

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;
}

Je me rends compte que du point de vue syntaxique x.(temp.La clé) est incorrect, mais j'espère qu'illustre ce que je suis en train de faire. Je me demandais si il existe une autre façon d'aller sur ce que je suis en train de faire sans avoir à faire un géant de l'instruction switch (ou si/d'autre si l'arbre).

MODIFIER

Donc, j'ai révisé un peu, mais je suis toujours avoir des problèmes avec elle. Voici ce que j'ai actuellement:

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;
}

Selon le LINQ Requête Dynamique de la Bibliothèque de l'article, cela devrait être OK. Voici l'erreur que je reçois:

Le type des arguments de la méthode 'Système.Linq.Interrogeable.Où(Système D'.Linq.IQueryable, Système.Linq.Les Expressions.L'Expression>) " ne peut pas être déduit à partir de l'utilisation. Essayez de spécifier le type des arguments explicitement.

Est-il une raison que la méthode de Recherche de paramètre doit être un dictionnaire plutôt qu'un Func<Produit, bool> ???
Pas entièrement sûr de ce que vous entendez par là... pourriez-vous préciser?
Chaque clé dans le dictionnaire contient les paramètres de rechercher (et de chaque valeur des paramètres à rechercher).
Par votre dynamique du générateur de requête exemple, j'ai rajouté un edit sur le "ET" à la fin ci-dessous, qui nous l'espérons corriger pour vous.

OriginalL'auteur jnevelson | 2010-10-28