检索整个对象的加入而不仅仅是性能

问题描述:

反正是有,我可以在此查询得到整个对象平台而不只是性质的,我使用波科与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); 
      } 

我尝试这样做,而不是:

return ctx.Games.Include("Platform").Take(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] 
+0

某处有问题,你的应用程序,因为使用'平台= j'应该工作。 – 2011-03-15 21:12:18

是的,有一个更好的办法:

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

当我使用你的方法时,我得到这个错误: 当没有数据存在时无效尝试读取。 任何想法? – n3tx 2011-03-15 20:33:05

+0

您的模型如何定义。 'Game'上的'平台'导航属性?如果是的话,这必须工作,这是正确的方式来做到这一点。 – 2011-03-15 20:34:21

+0

yes Platform是Game上的导航属性。 也许是要处理很多数据?我有30000多条记录。 – n3tx 2011-03-15 20:50:02