LINQ to实体 - 左边连接条件

Paw*_*man 1 linq linq-to-entities

我有一个表GameVersion与FK(允许空值)到Game表.当我这样做:

    GameVersion[] q = (from gv in db.GameVersion.Include("Game")
                       select gv).ToArray();
Run Code Online (Sandbox Code Playgroud)

它工作正常,在迭代GameVersion对象时,我可以在某些记录中看到对游戏的空引用(就像在数据库中一样),所以它就像左连接一样工作.

但是,当我稍微修改查询并添加按游戏名称搜索时

    GameVersion[] q = (from gv in db.GameVersion.Include("Game")
                       where gv.Game.DisplayName.Contains("a")
                       select gv).ToArray();
Run Code Online (Sandbox Code Playgroud)

它突然表现得像内连接(不再选择空引用).我不太明白这种行为.为什么会发生这种情况,如何使查询起作用?我想选择所有的GameVersions,甚至是那些Game == null并在其中一个游戏列上应用条件的游戏.

Jon*_*eet 6

好吧,如果没有游戏,就没有显示名称,所以它不能包含"a".如果你想选择游戏版本那里没有比赛,你需要明确这样做.试试这个:

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