我有一个这样的对象模型:
public class MyObject{
public int Prop1{get;set;}
public int Prop2{get;set;}
}
我在 linq to sql 查询中使用此对象,如下所示:
var MyQuery = from....
where....
select new MyObject()
{
Prop1 = ...
Prop2 = ...
};
问题是有时 Prop1 在查询中显示为空,并且我收到错误,因为 Prop1 为空。
我正在将其添加到类中:
public class MyObject{
...
public void Init()
{
this.Prop1 = 0;
this.Prop2 = 0;
}
如何将 Init 链接到事件"对象刚刚创建"?
而且,通过将对象初始化为 0 来解决 null 问题是最好的方法吗?
感谢您的建议。
编辑:我在 UI 中使用 Prop1,但我无法显示空,必须为 0。
你可以这样做:
select new MyObject()
{
Prop1 = prop1 ?? 0;
Prop2 = prop2 ?? 0;
};
但最好使用可为空值。
修复的两个位置:
public int? Prop1{get;set;}
或
select new MyObject()
{
Prop1 = // check for null here and put default value.
那为什么不使用Nullable<int>
呢?
public class MyObject{
public int? Prop1{get;set;}
public int? Prop2{get;set;}
}
int?
是Nullable<int>
的简写。 这意味着,现在Prop1
和Prop2
两者都可以null
.
或者,如果您想要零而不是空,请在 LINQ 中执行此操作:
select new MyObject() { Prop1 = p1 ?? 0, Prop2 = p2 ?? 0 }
您的数据库类型是否可为空?
如果是这样,则需要在类中定义:
public int? Prop1 { get; set; }
或者使用转换中的Convert.ToInt32(databseField)
将数据库类型转换为int
。