3

このコードを使用して、テーブルから目的の行のリストを取得しています。

_userObjectSet = EntityFrameWorkContext.CreateObjectSet<User>();
List<int> selectedUserIDs = Method(); //Returns a specific set of int user IDs...
var results = _userObjectSet.Where(c => selectedUserIDs.Contains(c.ID)).ToList();

「結果」には、ID フィールドが selectedUserIDs リストの要素と一致するレコードのみが含まれるため、これは機能します。

問題は、Windows タスク マネージャーを見ると、LINQ がすべてのテーブルの行を読み込んで、それらを除外しているように見えることです。このテーブルには膨大な数の行があり、すぐにプロセスの重みが 1GB を超えてしまいます。これはあまり好きではありません。

完了するまでに時間がかかるため、これを行っていることもわかります。

次のようなクエリを生成するように LINQ に指示する方法はありますか。

SELECT * FROM Users WHERE ID IN (34,55,66,77, etc.)

探している正確な行のみを返し、メモリの使用量が少ないのはどれですか?

ありがとう!

4

2 に答える 2

0

参加してみてください..違いを見つけることができると思います...

List<int> selectedUserIDs = Method(); //Returns a specific set of int user IDs...
var results = (from u in _userObjectSet 
               join id in selectedUserIDs on u.Id equals id
               select u);
于 2013-02-11T10:47:36.187 に答える
-1

これにはLinqKitのようなものが必要になります。具体的には、問題を解決するために必要だと思うので、キットに付属のPredicateBuilderを見てください。

于 2013-02-06T21:34:37.290 に答える