Объект LINQ из представления базы данных с отношением MANY к MANY - PullRequest
0 голосов
/ 20 января 2012

У меня проблема.У меня есть представление базы данных с отношением многие ко многим, оно выглядит так:

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 to SQL для работы с ним.Когда я обычно помещаю это представление в конструктор DBML, оно создает сущность.Но у сущности есть свойство TagName как String, и я хочу его как массив имен тегов (или лучше List <>).Когда я беру данные из базы данных, я получаю одну копию объекта Post для каждого отдельного тега, но я хочу получить один объект Post с массивом всех связанных тегов.

1 Ответ

1 голос
/ 20 января 2012

Может быть, это поможет: я изменил это соединение с

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 - база данных контекста

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...