我有一个像这样的对象模型:
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,我无法显示null,必须为0。
答案 0 :(得分:4)
你可以这样做:
select new MyObject()
{
Prop1 = prop1 ?? 0;
Prop2 = prop2 ?? 0;
};
但最好使用nullables。
答案 1 :(得分:2)
为什么不使用Nullable<int>
?
public class MyObject{
public int? Prop1{get;set;}
public int? Prop2{get;set;}
}
int?
是Nullable<int>
的简写。这意味着,现在Prop1
和Prop2
都可以是null
。
或者如果你想要零而不是null,那么在LINQ中执行此操作:
select new MyObject() { Prop1 = p1 ?? 0, Prop2 = p2 ?? 0 }
答案 2 :(得分:2)
您的数据库类型是否可以为空?
如果是这样,您需要在班级中定义:
public int? Prop1 { get; set; }
或使用投射中的int
将数据库类型转换为Convert.ToInt32(databseField)
。
答案 3 :(得分:2)
你可以解决的两个地方:
public int? Prop1{get;set;}
或
select new MyObject()
{
Prop1 = // check for null here and put default value.