造成这种奇怪的EntityFramework行为的可能日期是什么?

时间:2016-11-16 15:55:44

标签: sql vb.net linq entity-framework-6

我遇到了一个如此奇怪的EF问题,我花了一整天才相信它足以提出这个问题。

我有一张包含许多字段的表格,但相关的字段是

PlayerId int not null
TeamId int not null
GameDate date null

桌上有很多玩家,每个玩家都有团队和游戏日期。为简单起见,假设有两个玩家PLAYER1, PLAYER2,并且有3个游戏的日期DATE_P1_G1, DATE_P1_G2..., DATE_P3_G3(它们是真实日期,但我不认为日期值是相关的,所以我保留它因此,表中有6行。

考虑这个问题:

Dim playersByTeam = db.PlayerGames.
       Where(Function(x) x.TeamId = {VALUE}).
       ToList()

以及调试代码:

For Each item In playersByTeam
    Debug.WriteLine($"{item.PlayerId} {item.GameDate}")
Next

这会产生预期的结果:

PLAYER1 DATE_P1_G1
PLAYER1 DATE_P1_G2
PLAYER1 DATE_P1_G3
PLAYER2 DATE_P2_G1
PLAYER2 DATE_P2_G2
PLAYER2 DATE_P3_G2

但是我在(不可为空)PlayerId上添加了一个简单的排序:

Dim playersByTeam = db.PlayerGames.
       Where(Function(x) x.TeamId = {VALUE}).
       OrderBy(Function(x) x.PlayerId).
       ToList()

这会产生错误的输出:

PLAYER1 DATE_P1_G1
PLAYER1 DATE_P1_G1
PLAYER1 DATE_P1_G1
PLAYER2 DATE_P2_G1
PLAYER2 DATE_P2_G1
PLAYER2 DATE_P2_G1

换句话说,它会拉出每个玩家记录,但从其中一个中选择日期并将其分配给该玩家的所有行

作为测试,我使游戏日期列不可为空,然后它会产生正确的行为

可能导致什么?!

0 个答案:

没有答案