我的查询如下:
int ID = db.Q_Table.Find(item.PassedInID).ID;
我已经为我的问题找到了一个解决方案,但是我想知道为什么我必须这样写呢
1
Nullable(int) ID = db.Q_Table.Find(item.PassedInID).ID;
2
db.Q_Table.Where(w => w.PassedInID== item.PassedInID).Select(s => s.ID ).SingleOrDefault();
它不会让我把int int<在上面的代码-.- ...
我很好奇为什么我必须将它编码为可以为空的int?我真的不想像第二个解决方案那样编码,因为它的代码更多:)。是的我确保数据库中有值,从下图中可以看到我的数据库不接受空值。
感谢您的回答
答案 0 :(得分:2)
int
与Nullable<int>
或int?
之间存在差异,您无法直接将Nullable<int>
分配给int
(Nullable<T>
),考虑一下:
int? x = 123;
int y = x; //This would be an error
但您可以使用null-coalescing operator
int? x = 123;
int y = x ?? 0;
现在针对您的情况,您的ID
似乎是一个映射到数据库中的列,允许null
。这将映射到C#Nullable<int>
,如果您想将结果分配给int
,您可以这样做:
int ID = db.Q_Table.Find(item.PassedInID).ID ?? 0;
如果它是null,那么这将为您的变量赋予ID
或0
的值。
答案 1 :(得分:1)
ID
不是int
,而是Nullable<int>
(或简称int?
)。
当底层数据库列可以为空时,通常就是这种情况。
<
上没有定义int?
运算符。如果你想这样做,你必须首先检查是否存在值:
db.Q_Table.Where(w => w.PassedInID.HasValue && w.PassedInID.Value == item.PassedInID)
.Select(s => s.ID ).SingleOrDefault();
答案 2 :(得分:0)
这可能是因为db.Q_Table.Find
返回一个无效的int。
如果你想
,你也可以做以下事情int? ID = db.Q_Table.Find(item.PassedInID).ID;
答案 3 :(得分:0)
我想你可以做类似下面的事情,它的代码少了一点:
int? t;
int ID = (t = db.Q_Table.Find(item.PassedInID).ID) == null ? -1 : t;
当然,现在您必须在代码中稍后处理-1 ID作为特殊情况。我希望你只想要一个可以为空的int。