我想通过使用EF5 Code First传入一个以逗号分隔的ID列表来为一组实体加水。
我以前在t-sql中创建了一个表函数,在逗号分隔的Ids列表中传递,然后我将这个表连接到目标表并返回我的记录集。
使用EF5 Code First实现相同性能的最佳方式是什么?
更新:我想首先避免在内存中拥有完整的实体集。
Update2:我理想地喜欢与分隔列表匹配的实体的顺序。
答案 0 :(得分:8)
我要说的是首先将逗号分隔列表转换为List<int>
,其中包含您要使用的所有ID。此时,使用您的特定DbContext
课程,您将执行以下操作:
var entities = db.MyEntities.Where(e => myListOfIds.Contains(e.ID)).ToList();
注意:我只把ToList
放在那里,因为你在谈论保湿系列。否则,使用IEnumerable,将会延迟执行查询,因此它不会立即填充。
答案 1 :(得分: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; }
}