2

私の最初のLinqアプリケーションを書いて、次のことを行うための最良の方法を見つけようとしています:

従業員テーブル全体を一度にロードして、キャッシュにデータを入力したい (フォームのオートコンプリートに使用)。

できます -

var query = from employee in db.Employees select employee;
foreach (Employee e in query)
{
    ...
}

ただし、これは遅延読み込みであるため、従業員ごとに 1 つのクエリが生成されます。テーブル全体を熱心にロードするにはどうすればよいですか?

私は調べましDataLoadOptionsたが、それは関係に対してのみ機能するようです。

4

1 に答える 1

3
var query = db.Employees.ToList();

ちなみに、これは次と同等です。

var query = (from employee in db.Employees select employee).ToList();

ラムダ構文の方が理にかなっていて短い場合、クエリ演算子構文を使用することを強制する理由はありません。

補足 1 :queryオブジェクトのタイプは になりますがList<Employee>、明示的に指定した場合、生成される IL とパフォーマンスに関して違いはありません。

補足 2 : 質問で指定されたクエリが従業員ごとに 1 回実行されないことを知っておくことが重要です。一度だけ実行され、データベースから 1 つずつ取得されます (クエリSqlDataReaderを実行するオブジェクトと同様SELECT * FROM Employees)。ただし、ToList()リスト内のすべての行をロードして、そのオブジェクトへの追加のクエリが SQL Server ではなくアプリケーション自体で実行されるようにします。

于 2009-01-16T16:30:02.530 に答える