初始化对象来处理空查询结果
我有一个对象模型是这样的:初始化对象来处理空查询结果
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;
}
如何链接初始化到事件“对象刚刚创建的”?
而且,通过将对象初始化为0来解决null的问题是最好的方法吗?
感谢您的建议。
编辑:我在UI使用PROP1,我不能显示为空,必须为0。
你可以做到这一点的方法:
select new MyObject()
{
Prop1 = prop1 ?? 0;
Prop2 = prop2 ?? 0;
};
但它是更好地使用nullables。
'更好'取决于后续处理,如果后续处理将以与处理0相同的方式处理空值,则可能会立即转换,而不是具有潜在许多未来空值检查。正如@Ocelot20在上面的评论中所说的,它很大程度上取决于'MyObject'的功能以及它的使用方式。 – forsvarir 2011-05-28 23:17:45
@forsvarir当然,这取决于随后如何使用它。我只是从美学角度思考 - LINQ查询必须尽可能清晰。 – Centro 2011-05-28 23:25:24
如何将对象初始化为0而不是在查询级别进行初始化?什么事件处理程序? – frenchie 2011-05-29 00:03:23
为什么不使用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
。
'Prop1 = ... ?? 0'看起来更容易... – forsvarir 2011-05-28 23:07:32
不知道MyObject做什么的细节,以及每个属性的意图是什么,所以不可能有真正的答案。 – Ocelot20 2011-05-28 23:07:35