如何在EF5 Code First中从分隔的ID列表中返回实体

时间:2013-03-03 14:45:31

标签: entity-framework ef-code-first

我想通过使用EF5 Code First传入一个以逗号分隔的ID列表来为一组实体加水。

我以前在t-sql中创建了一个表函数,在逗号分隔的Ids列表中传递,然后我将这个表连接到目标表并返回我的记录集。

使用EF5 Code First实现相同性能的最佳方式是什么?

更新:我想首先避免在内存中拥有完整的实体集。

Update2:我理想地喜欢与分隔列表匹配的实体的顺序。

2 个答案:

答案 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; }
}