具体的な答えを出すのに十分な詳細を提供していませんが...
CSV ファイルが頻繁に変更される場合は、OLEDB を使用し、入力に基づいて SQL クエリを変更するだけです。
string sql = @"SELECT * FROM [" + fileName + "] WHERE Column1 LIKE 'blah%'";
using(OleDbConnection connection = new OleDbConnection(
@"Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" + fileDirectoryPath +
";Extended Properties=\"Text;HDR=" + hasHeaderRow + "\""))
CSV ファイルが頻繁に変更されず、それに対して多くの「クエリ」を実行する場合は、一度メモリにロードし、毎回すばやく検索します。
検索を列で完全に一致させたい場合は、キーが一致する列で、値が行データであるディクショナリを使用します。
Dictionary<long, string> Rows = new Dictionar<long, string>();
...
if(Rows.ContainsKey(search)) ...
検索を StartsWith のような部分一致にしたい場合は、検索可能なデータ (つまり、最初の列) を含む 1 つの配列と、行データを含む別のリストまたは配列を用意します。次に、C# の組み込みバイナリ検索を使用しますhttp://msdn.microsoft.com/en-us/library/2cy9f6wb.aspx
string[] SortedSearchables = new string[];
List<string> SortedRows = new List<string>();
...
string result = null;
int foundIdx = Array.BinarySearch<string>(SortedSearchables, searchTerm);
if(foundIdx < 0) {
foundIdx = ~foundIdx;
if(foundIdx < SortedRows.Count && SortedSearchables[foundIdx].StartsWith(searchTerm)) {
result = SortedRows[foundIdx];
}
} else {
result = SortedRows[foundIdx];
}
注: コードはブラウザー ウィンドウ内で記述されており、テストされていないため、構文エラーが含まれている可能性があります。