4

EF5コードファーストを使用してIDのコンマ区切りリストを渡すことにより、エンティティのコレクションをハイドレイトしたいと思います。

以前はt-sqlでテーブル関数を作成し、IDのコンマ区切りリストを渡してから、このテーブルをターゲットテーブルに結合して、レコードのコレクションを返していました。

同じことを達成するためにEF5コードファーストを使用する最もパフォーマンスの高い方法は何ですか?

更新:最初にエンティティの完全なセットがメモリに存在することを避けたい。

Update2:理想的には、エンティティの順序が区切りリストと一致するようにします。

4

2 に答える 2

8

List<int>まず、カンマ区切りのリストを、目的のすべてのIDを含むリストに変換することから始めます。その時点で、特定DbContextのクラスを使用して、次のことを行います。

var entities = db.MyEntities.Where(e => myListOfIds.Contains(e.ID)).ToList();

注:ToListあなたがコレクションの水分補給について話していたので、私はそこに最後に置くだけです。それ以外の場合、IEnumerableを使用すると、クエリの実行が延期されるため、すぐには入力されません。

于 2013-03-03T15:10:34.277 に答える
0

IDがIDのリストに属しているかどうかを確認することで、エンティティオブジェクトのセットを制限する、次のように行うことができます。

// Dummy list of POCO 'entity' objects (i.e. the Code first objects) just for the sake of this snippet
var entities = new List<Entity>();
entities.Add(new Entity() { ID = 1, Title = "Ent1" });
entities.Add(new Entity() { ID = 2, Title = "Ent2" });
entities.Add(new Entity() { ID = 3, Title = "Ent3" });

// List of ids to match
var ids = new List<int>();
ids.Add(1);
ids.Add(2);

// LINQ:
var selected = (from e in entities where ids.Contains(e.ID) select e).ToList();

完全を期すために、これは上記で使用したダミークラスです。

// POCO (Code first) object
private class Entity
{
    public int ID { get; set; }
    public string Title { get; set; }
}
于 2013-03-03T15:19:37.897 に答える