2010-04-18 7 views
0

Je cherche essentiellement à lier une requête de recherche à un gridview, ce qui est bien, mais cela doit être fait par une requête d'entrée de l'utilisateur (un peu comme une fonction de recherche). Je peux obtenir des valeurs simples et des lignes retournées, mais comment l'obtenir pour rechercher toutes les colonnes dans ma base de données pour les valeurs entrées et le renvoyer?Problème de déclaration Linq-to-SQL

Mon code à ce jour est:

Void SearchFunction() 
{ 
    TiamoDataContext context = new TiamoDataContext(); 

    var search from p in context.UserProfiles 
     where p.DanceType == UserSearchString 
     select p; 

    UserSearchGrid.DataSource = search; 
    UserSearchGrid.DataBind(); 
} 

J'ai essayé p.equals mais je suis assez sûr des thats pas la façon de s'y prendre.

+1

Que voulez-vous dire exactement par "toutes les colonnes?" Demandez-vous comment rechercher une chaîne dans chaque colonne de chaque table de la base de données? Chaque colonne d'une seule table? Ou essayez-vous vraiment de rechercher une colonne comme la requête actuelle semble suggérer? – Aaronaught

+0

ahh mes excuses pour être clair oui, chaque colonne dans un seul tableau serait correct ... ce qui ne va pas avec c'est actuellement ce n'est pas de vérifier toutes les colonnes dans la seule table juste colonne DanceType. – Anicho

Répondre

1

Si vous souhaitez que chaque colonne de la table soit recherchée, vous devez lui indiquer d'effectuer une recherche dans chaque colonne du tableau.

var search = 
    from p in context.UserProfiles 
    where 
     p.DanceType == UserSearchString || 
     p.Foo == UserSearchString || 
     p.Bar == UserSearchString 
    select p; 

C'est tout ce qu'il y a à faire. Il n'y a pas d'opérateur magique qui le fera automatiquement (il ne peut y avoir - certaines colonnes pourraient même ne pas être des chaînes). Gardez à l'esprit que cela sera probablement très lent, car l'optimiseur de requêtes ne pourra pas sélectionner un seul index capable de gérer cette requête entière. En outre, cette "recherche" ne teste que l'égalité pure. Vous pouvez utiliser StartsWith ou Contains pour une recherche de préfixe ou de sous-chaîne, respectivement.

3

Il semble que votre requête sytax soit un peu éteinte. Il devrait ressembler à:

var search = from p in context.UserProfiles 
      where p.DanceType == UserSearchString 
      select p; 

Depuis que vous essayez d'interroger plusieurs colonnes, vous allez devoir enchaîner les noms des colonnes que vous regardez avec or « s:

var search = from p in context.UserProfiles 
      where p.DanceType == UserSearchString || 
       p.Name == UserSearchString || 
       p.SomeOtherStringColumn == UserSearchString 
      select p; 

Ou si vous souhaitez utiliser la syntaxe Lambda:

var search = context.UserProfiles.Where(p => p.DanceType == UserSearchString || 
       p.Name == UserSearchString || 
       p.SomeOtherStringColumn == UserSearchString); 

Gardez à l'esprit que l'utilisation de l'une de ces méthodes implique que p.DanceType est un type string.

+0

Merci, j'essaie d'obtenir la recherche de toutes les colonnes dans une seule table et je me demandais comment s'y prendre désolé que ce n'était pas très clair :). – Anicho

+0

p.column.ToString() est ce que je vais utiliser pour réparer le type de chaîne rien de complexe n'est stocké donc ce n'est pas un problème .... merci pour le ou je n'étais pas sûr si c'était la syntaxe juridique :) – Anicho