在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的功能,我可以只提交主键集合并获取集合?我没有看到一个,写一个最好的方法是什么?
答案 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