以下是我的代码,当我从GameByGameTypes和Categories中获取值时,但在名为GameByGameTypes的表中,ColumnId列具有NULL值。所以我想要0 inplace of NULL
Category objCategory;
var query = (from gametypebygametype in db.GameByGameTypes.Where( x => x.GameTypeId == gametypeid)
join category in db.Categories
on gametypebygametype.CategoryId equals category.CategoryId into joined
from category in joined.DefaultIfEmpty()
select new
{
category.CategoryId ,
category.CategoryName
}
).Distinct();
List<Category> objlistCategory = new List<Category>();
foreach (var item_temp in query)
{
objCategory = new Category();
objCategory.CategoryId = item_temp.CategoryId;
objCategory.CategoryName = item_temp.CategoryName;
objlistCategory.Add(objCategory);
}
答案 0 :(得分:4)
或者你可以替换
select new
{
category.CategoryId,
category.CategoryName
}
带
select new
{
CategoryId = category.CategoryId ?? 0,
CategoryName = category.CategoryName ?? "",
}
如果您使用ReSharper,它会'抱怨'不需要?? 0
部分。忽略它。
您使用的Linq代码已转换为SQL。当你执行它时 - 结果为空,但是强类型编译器不能相信它,并等待不可为空的值。 (这是'物化'的过程,但失败了)。 所以你只是'提示'编译器,它可能是null。
答案 1 :(得分:0)
您有三种方法可以解决这个问题:
您可以在数据库not null
中设置列,并将默认值设置为第0列。
您可以设置类别属性int? CategoryId
。
您可以将查询更改为使用默认值
的DefaultIfEmpty var query = (from gametypebygametype in db.GameByGameTypes.Where( x => x.GameTypeId == gametypeid)
join category in db.Categories
on gametypebygametype.CategoryId equals category.CategoryId into joined
from category in joined.DefaultIfEmpty( new
{
CategoryId=0,
Categoryname=""
})
select new ...
答案 2 :(得分:0)
尝试使用GetValueOrDefault
Category objCategory;
var query = (from gametypebygametype in db.GameByGameTypes.Where( x => x.GameTypeId == gametypeid)
join category in db.Categories
on new {A = gametypebygametype.categoryID.GetValueOrDefault(0)}
equals new {A = category.categoryID}
into joined
from category in joined.DefaultIfEmpty()
select new
{
category.CategoryId ,
category.CategoryName
}
).Distinct();
List<Category> objlistCategory = new List<Category>();
foreach (var item_temp in query)
{
objCategory = new Category();
objCategory.CategoryId = item_temp.CategoryId;
objCategory.CategoryName = item_temp.CategoryName;
objlistCategory.Add(objCategory);
}