我有一个表GameVersion与FK(允许空值)到Game表。当我这样做时:
GameVersion[] q = (from gv in db.GameVersion.Include("Game")
select gv).ToArray();
它工作正常,在迭代GameVersion对象时,我可以在某些记录中看到对游戏的空引用(就像在数据库中一样),所以它就像左连接一样。
但是,当我稍微修改查询并按游戏名称添加搜索
时 GameVersion[] q = (from gv in db.GameVersion.Include("Game")
where gv.Game.DisplayName.Contains("a")
select gv).ToArray();
它突然表现得像内连接(不再选择空引用)。我不太明白这种行为。为什么会发生这种情况,如何使查询起作用?我想选择所有的GameVersions,甚至是那些Game == null并在其中一个游戏列上应用条件的游戏。
答案 0 :(得分:6)
如果没有游戏,则不能显示名称,因此不能包含“a”。如果你想还选择没有游戏的游戏版本,你需要明确地这样做。试试这个:
GameVersion[] q = (from gv in db.GameVersion.Include("Game")
where gv.Game == null || gv.Game.DisplayName.Contains("a")
select gv).ToArray();