我剛開始學習LINQ2SQL,我想嘗試的第一件事情是簡單的父子層次結構,但似乎找不到一個好辦法。我在這裏看到了一些例子,並且我已經使用了Google,但是我不能直接應用它們,所以我會解釋我想要完成的工作。與LINQ2SQL和POCO對象的親子關係
讓我們使用帶有標籤的常見示例。
數據庫表:Post-- Post_Tags - 標籤
我創建了一個簡單的郵政類,所以我儘量避免周圍路過LINQ2SQL類:
public class Post
{
public int Id {get; set;}
public int Title {get; set;}
public IEnumerable<string> Tags {get; set;}
}
我想選擇5個最新記錄Posts表格,獲取他們的相關標籤並返回IList,其中每個Post都有其標籤屬性填充。
你能告訴我一個具體的Linq2Sql代碼我該怎麼做?
我想:
IList<Post> GetLatest()
{
return (from p in _db.Posts
orderby p.DateCreated descending
select new Post
{
Id = p.Id,
Title = p.Title,
Tags = p.Post_Tags.Select(pt => pt.Tag.Name)
}).Take(5).ToList();
}
這工作,但複製發表記錄每個標籤記錄,我在每一個方法,我的用戶複製屬性映射(ID = p.Id,...)。然後,我嘗試這種方法,但在這種情況下,我有一個往返到數據庫爲每個變量:
IQueryable<Post> GetList()
{
return (from p in _db.Posts
select new Post
{
Id = p.Id,
Title = p.Title,
Tags = p.Post_Tags.Select(pt => pt.Tag.Name)
});
}
IList<Post> GetLatest()
{
return (from p in GetList()
orderby p.DateCreated descending
select p).Take(5).ToList();
}
如果我是在經典的ADO.NET這樣做,我會創建一個存儲過程返回兩個結果。一個帶有Post記錄,另一個帶有相關的Tag記錄。然後,我會將它們映射到代碼中(由DataRelation,ORM等人手)。我可以使用LINQ2SQL嗎?
我真的好奇看到一些代碼示例你們如何處理這樣簡單的層次結構。
是的,我真的很想返回IList <>對象和我的自定義類,而不是可查詢的Linq to Sql對象,因爲我想靈活地瞭解數據訪問代碼,例如,如果我決定放棄Linq2Sql。
謝謝。
謝謝您的回答,但最重要的,這是我不希望靠LINQ2SQL課後的DAL。 – muerte 2009-03-01 16:08:10