我的JOIN遇到了很多麻烦,我不知道它是否依赖于EDM或它是否仅仅是LINQ查询。
当我在SSMS中尝试这个T-SQL时,它就像一个魅力:
选择g.Id,g.Title,p.Platform_short 来自游戏g 左外连接平台为p on g.PlatformId = p.Id
但是当我尝试将T-SQL翻译成LINQ时,用这个:
我得到的问题是平台== null
我尝试了不同的方法,但后来又重复了。
我已经坚持了几天这个问题,而且我是EF的新手。
var games = (from g in ctx.Games
join p in ctx.Platforms
on g.Platform.Id equals p.Id
select new
{
Id = g.Id,
Title = g.Title,
Platform = g.Platform,
});
Heres是整个方法:
public ICollection<Game> GetGames()
{
using(xContext ctx = new xContext())
{
ICollection<Game> col = new Collection<Game>();
var games = (from g in ctx.Games
join p in ctx.Platforms
on g.Platform.Id equals p.Id
select new
{
Id = g.Id,
Title = g.Title,
Platform = g.Platform,
});
foreach (var g in games)
{
Game game = new Game();
game.Id = g.Id;
game.Title = g.Title;
game.Platform = g.Platform;
col.Add(game);
}
return col;
}
}
我的GamePoco具有平台属性,并且是EDM中的一对一关系。
希望任何人都可以提供帮助!
答案 0 :(得分:0)
当结果没有来自连接的enity set的任何内容时,你的左连接的目的是什么?
试试这个:
var games = (from g in ctx.Games
join p in ctx.Platforms
on g.Platform.Id equals p.Id into joinTable
from j in jointTable.DefaultIfEmpty()
select new
{
Id = g.Id,
Title = g.Title,
Platform = j.PlatformShort
});
这仅适用于EFv4。