初始化对象以处理空查询结果

时间:2011-05-28 23:03:10

标签: c# linq

我有一个像这样的对象模型:

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。

4 个答案:

答案 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>的简写。这意味着,现在Prop1Prop2都可以是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.