我刚开始学习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