3

ファイルを解析し、結果をC#のリストに保存します。次に、DBクエリのすべての結果を別のリストに解析します。2つのリストの一致を比較し、結果を別のリストに保存して出力ファイルを書き込みたいと思います。2つのリストを比較する方が、ファイル内のレコードが約16kであるため、各人に対して毎回DBに対してクエリを実行するよりも高速で優れていると思いました。

リスト1.リストfileListには、次のデータ型が含まれています。stringpersonsName

リスト2.リストDBresultsには、文字列personsName、文字列アドレス、文字列phoneNumberのデータ型が含まれています

リスト1とリスト2を比較して一致するものを見つけ、結果を別のリストに送信して出力を書き込もうとしています。リスト2では、1人あたり複数の結果になる可能性があるため、すべてのインスタンスを見つける必要があります。

このようなLINQクエリから始めましたが、私はLINQのマスターではないため、サポートが必要です。

var matches = fileList.Where(a=>a.personsName == DBResults.where(s=>s,personsName).toList();

あなたがより速い方法を持っているかもしれないとあなたが思うならば、私は他の提案にもオープンです。IDctionarysとHashtablesは高速ルックアップテーブルであることは知っていますが、3つのデータ型があるため、キーと値のペアを実行できません。

4

1 に答える 1

6

私があなたの問題を正しく理解していれば、解決策はLINQJoinメソッドです。

var result = (from a in fileList
              join s in DBResults on a.personsName equals s.personsName
              select s).ToList();

または、拡張メソッドの構文を使用します。

var result = fileList.Join(DBResults, a => a.personsName, s => s.personsName, (a, s) => s).ToList();

このメソッドは非常に高速で、内部的にHashSetを使用してパフォーマンスを向上させます。

于 2013-02-04T19:02:03.127 に答える