LINQ to实体 - 左边连接条件

时间:2010-07-28 12:08:11

标签: linq linq-to-entities

我有一个表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并在其中一个游戏列上应用条件的游戏。

1 个答案:

答案 0 :(得分:6)

如果没有游戏,则不能显示名称,因此不能包含“a”。如果你想选择没有游戏的游戏版本,你需要明确地这样做。试试这个:

GameVersion[] q = (from gv in db.GameVersion.Include("Game")
                   where gv.Game == null || gv.Game.DisplayName.Contains("a")
                   select gv).ToArray();