为什么空集的总和为空?

Tom*_*len 13 linq math sum set linq-to-sql

如果我做:

int updateGamePlays = db.tblArcadeGames.Where(c => c.ParentGameID == GameID).Sum(c => c.Plays);
Run Code Online (Sandbox Code Playgroud)

如果此查询中未返回任何记录,则抛出:

System.InvalidOperationException:无法将null值分配给类型为System.Int32的成员,该成员是非可空值类型.

让它返回0的唯一方法是:

int updateGamePlays = db.tblArcadeGames.Where(c => c.ParentGameID == GameID).Sum(c => (int?)c.Plays) ?? 0;
Run Code Online (Sandbox Code Playgroud)

在数据库中c.Plays是一个不可为空的int.

在集合论中,空集的总和应该等于0(ref).Linq-to-SQL是如何决定让它返回的null呢?

das*_*ght 10

根据微软的消息来源,Sum()在一个空集上是null因为它在SQL中的工作方式:

当表为空时,我得到此异常:InvalidOperationException

在SQL中,Sum()聚合运算符为空集返回null.所以这是设计的.

  • "......因为设计错误." (17认同)