4

我想通过使用 EF5 Code First 传入以逗号分隔的 ID 列表来补充实体集合。

我之前会在 t-sql 中创建一个表函数,传入以逗号分隔的 Id 列表,然后将此表连接到目标表并返回我的记录集合。

使用 EF5 Code First 实现相同目标的最高效方式是什么?

更新:我想避免首先在内存中拥有全套实体。

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 回答