2012-01-20 65 views
0

我有一个问题。我有很多数据库以一对多的关系,它看起来像这样LINQ实体从数据库视图与MANY到很多关系

SELECT TOP (100) PERCENT dbo.PostAdditional.Description, dbo.PostAdditional.Summary, dbo.PostAdditional.Title, dbo.Post.PostID, dbo.Post.Type, dbo.Tags.TagID, dbo.Tags.TagName, 
FROM dbo.Post 
INNER JOIN dbo.PostAdditional ON dbo.Post.PostID = dbo.PostAdditional.PostID 
INNER JOIN dbo.PostWithTags ON dbo.Post.EventID = dbo.PostWithTags.PostID 
INNER JOIN dbo.Tags ON dbo.PostWithTags.TagID = dbo.Tags.TagID 
ORDER BY dbo.Post.StartDate, dbo.Post.PubDate 

我想使用LINQ到SQL与它合作。当我正常地将这个视图放在DBML设计器中时,它会创建一个实体。但实体具有保护作为字符串TagName,我想它作为标签名称数组(或更好列表<>)。当我从数据库中获取数据时,我得到了一个用于evry单个标签的Post实体副本,但是我希望获得一个Post实体和所有标签相关联的数组。

回答

1

也许这将帮助: 我改变从

INNER JOIN dbo.PostWithTags ON dbo.Post.EventID = dbo.PostWithTags.PostID 

这个加盟

INNER JOIN dbo.PostWithTags ON dbo.Post.PostID = dbo.PostWithTags.PostID 

如果我理解你的权利,这就是你想要什么?

var test= 
    (
     from p in db.Post 
     orderby p.StartDate,p.PubDate 
     select new 
     { 
      p.PostID, 
      p.Type, 
      Tags= 
       (
        from pa in db.PostAdditional 
        join pwt in db.PostWithTags 
         on pa.PostID equals pwt.PostID 
        join t in db.Tags 
         on pwt.TagID equals t.TagID 
        where p.PostID == pa.PostID 
        select new 
        { 
         pa.Description, 
         pa.Summary, 
         pa.Title, 
         t.TagID, 
         t.TagName 
        } 
       ) 
     } 
    ).ToList(); 

其中db是databasecontext

+0

赞成票,我想要什么你写的LINQ查询,但作为SQL视图,并从中LINQ实体。 – PavelKumpan

相关问题