Получить весь объект в объединении, а не только свойства - PullRequest
0 голосов
/ 15 марта 2011

Могу ли я в любом случае получить всю объектную платформу вместо свойств этого запроса, я использую Poco с EF4:

var games = (from g in ctx.Games
join p in ctx.Platforms on g.Platform.Id equals p.Id into joinTable
from j in joinTable.DefaultIfEmpty()                             
  select new
     {
       GameId = g.Id,
       Title = g.Title,
       PlatformId = j.Id,
       PlatformShort = j.Platform_short                                 

      });

Вместо использования PlatformId и PlatformShort я просто хочу получить весь объект Platform (j). Как "Платформа = J"

И есть ли лучший способ вернуть набранную коллекцию без повторения игр в первую очередь?

foreach (var g in games)
            {
                Game game = new Game();
                game.Platform = new Platform();
                game.Id = g.GameId;
                game.Title = g.Title;
                game.Platform.Id = g.PlatformId;
                game.Platform.Platform_short = g.PlatformShort;                    

                col.Add(game);
            }

Я попробовал это вместо:

возврат . Ctx.Games.Include ( "Платформа") Возьмите (50) .ToList ();

И теперь я получил одно и то же значение для всех 100 записей.

Вот SQL:

FROM   [dbo].[Games] AS [Extent1] 
LEFT OUTER JOIN  (SELECT [Extent2].[Id] AS [Id1], [Extent2].[Platform_short] AS [Platform_short], [Extent2].[Platform_long] AS [Platform_long], [Extent2].[Description] AS [Description], [Extent2].[Image] AS [Image], [Extent2].[CreatedDate] AS [CreatedDate1], [Extent2].[ModifiedDate] AS [ModifiedDate1]
    FROM  [dbo].[Platforms] AS [Extent2]
    LEFT OUTER JOIN [dbo].[Games] AS [Extent3] ON [Extent2].[Id] = [Extent3].[PlatformId] ) AS [Join1] ON [Extent1].[PlatformId] = [Join1].[Id1] LEFT OUTER JOIN  (SELECT [Extent4].[Id] AS [Id3], [Extent5].[Id] AS [Id2]
    FROM  [dbo].[Platforms] AS [Extent4]
    LEFT OUTER JOIN [dbo].[Games] AS [Extent5] ON [Extent4].[Id] = [Extent5].[PlatformId] ) AS [Join3] ON [Extent1].[PlatformId] = [Join3].[Id3]

1 Ответ

0 голосов
/ 15 марта 2011

Да, есть лучший способ:

var collection = context.Games.Include("Platform").ToList();
...