如何检查DBNull为linq或int32?

时间:2013-04-15 07:05:31

标签: c# wpf asp.net-mvc linq

我想获取CategoryIdnull的所有行。我写下面的代码,但它给了我错误

  

“运算符'=='无法应用于'int?'类型的操作数和   System.DBNull

   public Nullable<Int32>  CategoryId { get; set; }
    Game objGame;
    var query = (from gametypebygametype in db.GameByGameTypes.Where(x => x.CategoryId == DBNull.Value)
                  join game in db.Games
                 on gametypebygametype.GameId equals game.GameId into joined
    from game in joined.DefaultIfEmpty()
                              select new
                                 {
                                     game.GameId,
                                     game.GameName
                                 }
                                ).Distinct();
                    List<Game> objlistGame = new List<Game>();
                    foreach (var item_temp in query)
                    {
                        objGame = new Game();
                        objGame.GameId = item_temp.GameId;
                        objGame.GameName = item_temp.GameName;
                        objlistGame.Add(objGame);
                    }

3 个答案:

答案 0 :(得分:2)

尝试使用null而不是DBNull.ValueHasValue = false

答案 1 :(得分:1)

您需要修改WHERE子句并使用Nullable<T>.HasValue作为:

.Where(x => !x.CategoryId.HasValue)

来自

.Where(x => x.CategoryId == DBNull.Value)

答案 2 :(得分:0)

如果您要获取CategoryIdnull的所有行,只需检查nullable是否已分配值:

db.GameByGameTypes.Where(x => !x.CategoryId.HasValue)