2012-04-03 6 views
3

Ich versuche, eine allgemeine Suchfunktion zu erstellen, die den Inhalt jedes Felds in einer Ergebnismenge durchsuchen wird.Wie durchsuche ich den Inhalt aller Felder in einer Abfrageergebnismenge?

So zum Beispiel, wenn ich eine Funktion in T-SQL schreiben, die eine Ergebnismenge zurückgibt, die 100 Zeilen und die Felder enthält TicketID, FirstName, LastName und Comment ich für die jedes dieser Felder für jeden Datensatz suchen möchten Zeichenfolge 'Mike'.

Also im Wesentlichen, wenn das Wort "Mike" in einem dieser Felder ist, wird dieser Datensatz in meiner Suche enthalten sein.

Wie mache ich das?

Antwort

2

Sie könnten einen vollständigen Volltext-Index erstellen. Sie können diesen Index für eine ganze Tabelle oder ausgewählte Spalten in der Tabelle über eine Sicht haben. http://msdn.microsoft.com/en-us/library/ms142575.aspx#examples Es hat seine eigene Syntax, ist aber Teil der TSQL-Abfrage und kann mit der regulären Spaltensuche kombiniert werden.

1
from x in someTableOrQuery 
where x.FirstName.Contains(str) || x.LastName.Contains(str) || ... 
select x 

Dies ist nur normale C#. Keine Tricks erforderlich.

Beachten Sie, dass dies zu einem LIKE-Ausdruck in SQL übersetzt wird. Sie müssen jedoch keine manuelle String-Verkettung durchführen, die fehleranfällig ist (in diesem Fall keine SQL-Injektion).

+0

x ist nicht definiert – Paparazzi

+0

Ich verbesserte den Beispielcode. – usr

1

Oder Sie können die SqlMethods.Like-Methode verwenden, sodass Sie Ihren Ausdruck nach einem bestimmten Muster durchsuchen können.

Etwas wie folgt aus:

where SqlMethods.Like(str,"%Mike%"); 

hoffe, das hilft!

1

Der Eintrag für diese Methode wäre eine DataTable mit der daraus resultierenden Menge der Ausführung der Abfrage. Dann müssen Sie die Zeilen und Spalten auf diese Weise durchlaufen:

foreach (DataRow dr in yourDataTable.Rows) 
{ 
    foreach(DataColumn col in yourDataTable.Columns) 
    { 
     try 
     { 
      if (dr[col].ToString().Contains("Mike")) 
      { 
       //Save this one! 
      } 
     } 
     catch 
     { 
      //it was not a string, go on then. 
     } 
    } 
} 
Verwandte Themen