2014-02-14 60 views
0

選擇對象的集合,在MVC中,如果我需要使用主鍵我可以使用查找功能從數據庫中獲取一個對象:大多數efficent辦法從的DbContext

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

什麼是最有效的方法獲取對象的集合?

這似乎並不十分有效,altough它將工作:

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

大概得到每次通話是一個數據庫請求。

有沒有像Find這樣的功能,我只需遞交主鍵集合並返回集合?我沒有看到一個,寫一個最好的方法是什麼?

+0

'ids'可以包含多少個元素? –

+0

我不希望超過幾十個,儘管更多的時候不是單個數字。 – Jon

回答

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

return db.Elements.Where(z => ids.Contains(z.Id)); // Use .ToList() to materialize entities 
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(); 
} 
0

對於應關閉最佳性能變化跟蹤(使一個巨大的差異)
(從ken2k複製的代碼)

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

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