2012-12-18 60 views
1

我編寫一個實體的輔助類,通常我用的成才一樣,我應該在查詢中使用IQueryable列表而不是實體嗎?

private CVSystemEntities db; 

public EntityHelper() 
    { 

     db = new CVSystemEntities(); 
    } 

    public IQueryable<Members> GetMembersForRole(Role role) 
    { 
     if (!RoleExists(role)) 
      throw new ArgumentException(MissingRole); 

     return db.Members.Where(m => m.RoleID == role.Id).OrderBy(m=>m.Name).AsQueryable(); 
    } 

它的好,但如果我使用類似的東西

private CVSystemEntities db; 
    private IQueryable<Members> membersDb; 


public EntityHelper() 
    { 

     db = new CVSystemEntities(); 
     membersDb = db.Members.Select(s => s); 
    } 

    public IQueryable<Members> GetMembersForRole(Role role) 
    { 
     if (!RoleExists(role)) 
      throw new ArgumentException(MissingRole); 

     return membersDb.Where(m => m.RoleID == role.Id).OrderBy(m=>m.Name).AsQueryable(); 
    } 

我用membersClass代替db.members。我從db.members創建了一個。

那麼,你怎麼看待這種方式呢?我應該使用一些這種? 如果你問爲什麼你要使用它,我認爲我不會查詢我的分貝這麼多,也許會更好?

+0

如果你不需要打數據庫..不要打數據庫.. –

回答

3

我應該使用這些嗎?如果你問你爲什麼要使用它,我認爲我不會查詢我的分貝,也許會更好?

不,你正在做數量完全相同的工作量。這:

membersDb = db.Members.Select(s => s); 

... 對數據庫執行查詢,然後保留的結果,因爲我相信你期望它。相反,它有效地構建查詢 - 但保留以後的查詢

如果你把它改爲:

IEnumerable<Members> membersDb; 
... 
membersDb = db.Members.ToList(); 

那麼剛打了一次數據庫 - 但當然,你會如果數據庫中更改會過時的數據。也許這沒關係 - 目前還不清楚你的EntityHelper的壽命是多少 - 但對我來說似乎不太可能。請注意,對ToList的調用也將從數據庫中提取全部成員 - 但否則您的查詢將具有適當的Where子句,限制所提取的內容。你可能不想將整個表格存入內存,除非它非常小。

+0

謝謝你的回答。 :) – unbalanced

相關問題