結果セットのすべてのフィールドの内容を検索する一般的な検索機能を作成しようとしています。
たとえば、100 行とフィールドTicketID
、FirstName
を含む結果セットを返す関数を TSQL で記述する場合、文字列 'Mike' の各レコードについて、これらのフィールドのそれぞれを検索LastName
しComment
たいとします。
基本的に、これらのフィールドのいずれかに「Mike」という単語があれば、そのレコードが検索に含まれます。
どうすればいいですか?
結果セットのすべてのフィールドの内容を検索する一般的な検索機能を作成しようとしています。
たとえば、100 行とフィールドTicketID
、FirstName
を含む結果セットを返す関数を TSQL で記述する場合、文字列 'Mike' の各レコードについて、これらのフィールドのそれぞれを検索LastName
しComment
たいとします。
基本的に、これらのフィールドのいずれかに「Mike」という単語があれば、そのレコードが検索に含まれます。
どうすればいいですか?
そのメソッドのエントリは、クエリの実行結果のセットを含む DataTable になります。次に、この方法で行と列を繰り返す必要があります。
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.
}
}
}
全文索引を作成できます。ビューを介して、テーブル全体またはテーブル内の選択された列に対してこのインデックスを使用できます。 http://msdn.microsoft.com/en-us/library/ms142575.aspx#examples 独自の構文がありますが、TSQL クエリの一部であり、通常の列検索と組み合わせることができます。
または、SqlMethods.Like メソッドを使用して、式から特定のパターンを検索できます。
このようなもの:
where SqlMethods.Like(str,"%Mike%");
お役に立てれば!
from x in someTableOrQuery
where x.FirstName.Contains(str) || x.LastName.Contains(str) || ...
select x
これは通常の C# です。トリックは必要ありません。
これは SQL の LIKE 式に変換されることに注意してください。ただし、バグが発生しやすい手動の文字列連結を行う必要はありません (この場合は SQL インジェクションではありません)。