我想通过使用 EF5 Code First 传入以逗号分隔的 ID 列表来补充实体集合。
我之前会在 t-sql 中创建一个表函数,传入以逗号分隔的 Id 列表,然后将此表连接到目标表并返回我的记录集合。
使用 EF5 Code First 实现相同目标的最高效方式是什么?
更新:我想避免首先在内存中拥有全套实体。
Update2:理想情况下,我希望实体的顺序与分隔列表相匹配。
我想通过使用 EF5 Code First 传入以逗号分隔的 ID 列表来补充实体集合。
我之前会在 t-sql 中创建一个表函数,传入以逗号分隔的 Id 列表,然后将此表连接到目标表并返回我的记录集合。
使用 EF5 Code First 实现相同目标的最高效方式是什么?
更新:我想避免首先在内存中拥有全套实体。
Update2:理想情况下,我希望实体的顺序与分隔列表相匹配。
我会说首先将逗号分隔列表转换为List<int>
包含您将要使用的所有 ID 的列表。那时,使用您的特定DbContext
课程,您将执行以下操作:
var entities = db.MyEntities.Where(e => myListOfIds.Contains(e.ID)).ToList();
注意:我只把它ToList
放在最后,因为你在谈论为收藏品补水。否则,使用 IEnumerable 时,查询将延迟执行,因此不会立即填充。
您可以这样做,通过检查实体对象的 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; }
}