我不知道如何標題這個,所以如果有人可以更適當地重命名,這將不勝感激。實體框架類,擴展EF類和添加自定義屬性,iQueryable和獲取方法
我堅持我如何去填充部分實體類的自定義屬性。一些例子
// partial class from EF base class - base class contains
// properties such as commentID, comment, userID etc
// Comments.cs
public partial class Comment {
public int UpVotes { get; set; }
public int DownVotes { get; set; }
public int CurrentVotes()
{
return UpVotes - DownVotes;
}
}
_
//CommentRepository.cs
//snip
public Comment GetItem(int id)
{
Comment c = db.Comments.SingleOrDefault(x => x.CommentID == id);
c.UpVotes = 0 //get UpVotes
c.DownVotes = 0 // get DownVotes
return c;
}
public IQueryable<Comment> GetAllCommentsByPage(int pageid)
{
}
public IQueryable<Comment> GetAllCommentsByPage(string slug)
{
}
public IQueryable<Comment> GetCommentSelection(int PageID, int Skip, int Take)
{
}
public int CountCommentByPage(int PageID)
{
}
在舊的.Net 1.x的日子裏,我將不得不在GetAllx方法選擇CommentIDs的列表,然後通過使用List.Add填充新的列表(的GetItem(ID))。
在EF4中,我想要做類似的事情,但不會因爲延遲執行IQueryables而失去作用。
在幾個實例中,我發現在執行最後的.ToList()或類似的獲取實際數據之前,快速連續堆疊這些GetAllx方法很有用。
有沒有一種明智的方式讓我做我想做的事情,相當簡單,避開我?我討厭不得不改變每個方法來返回一個可以通過一個GetItem方法生成的項目的靜態列表。
在此先感謝。
----- -----編輯
好吧,這裏的解決方案,我目前有:
public List<Comment> IQueryable2ToList(IQueryable<Comment> c)
{
List<Comment> comments = new List<Comment>();
List<int> ids = c.Select(x => x.CommentID).ToList();
foreach (int id in ids) {
comments.Add(GetComment(id));
}
return comments;
}
這一點我做致電:
List<Comment> comments = (new CommentRepository()).IQueryable2ToList(db.FindAllCommentsByPage(slug));
剛剛似乎有點不知何故...
你有什麼部分的代碼實際上不工作? –
對不起,也許我還不清楚。沒有實質性的損失。我只是希望每個IQuerable選擇都會返回GetItem中列出的註釋列表(使用我自定義的額外參數),而不是EF返回的股票參數。 –