从DbContext中选择对象集合的最有效方法

时间:2014-02-14 13:31:08

标签: c# linq entity-framework asp.net-mvc-4 dbcontext

在MVC中,如果我需要使用主键从数据库中获取一个对象,我可以使用find函数:

public static Element List(Guid id)
{
    DBContext db = new DBContext();
    return db.Elements.Find(id);
}

获取对象集合的最有效方法是什么?

这似乎不是很有效,尽管它会起作用:

public static IEnumerable<Element> List(IEnumerable<Guid> ids)
{
    foreach (Guid id in ids)
        yield return Get(id);
}

大概每次调用Get都是一个数据库请求。

是否有类似Find的功能,我可以只提交主键集合并获取集合?我没有看到一个,写一个最好的方法是什么?

3 个答案:

答案 0 :(得分:2)

DBContext db = new DBContext();
List<Guid> ids = ....

return db.Elements.Where(z => ids.Contains(z.Id));  // Use .ToList() to materialize entities

答案 1 :(得分:0)

另一种方法是使用Linq:

List<Guid> your_ids = ..... ;

using(DBContext db = new DBcontext())
{
   var lst = from e in db.Elements 
             where your_ids.Contains(e.Id) 
             select e;

   List<Guid> result_list = lst.ToList();
}

答案 2 :(得分:0)

为获得最佳性能,您应该关闭更改跟踪(产生巨大差异)
(从ken2k复制代码)

DBContext db = new DBContext();
List<Guid> ids = ....

return db.Elements
    .AsNoTracking()
    .Where(z => ids.Contains(z.Id));  // Use .ToList() to materialize entities