当数据库字段为空/ null时,如何将变量设置为null而不是捕获NullReferenceException?

时间:2011-12-15 23:22:21

标签: c# linq entity-framework

我使用以下代码获取数据库中所有用户的列表:

IEnumerable<Firma> firmaer = db.Firma.ToList();

我尝试将每个用户映射到看起来像这样的ViewModel:

public class UserViewModel
{
    public String CVR_Nummer { get; set; }
    public DateTime LastActivityDate { get; set; }
    public DateTime CreationDate { get; set; }
    public String FirmaNavn { get; set; }

}

当数据库中的字段firma_navn为空时,我得到一个NullReferenceException

model.FirmaNavn = firmaer.Where(x => x.CVR_nummer == user.UserName).FirstOrDefault().firma_navn ?? "Missing";

抛出NullReferenceException。

我可以捕捉到这个异常,但我听说过捕获异常有点沉重。

我想做的是制作

model.FirmaNavn = "Missing";

如果数据库中的字段为空。

这是否可以在没有捕获异常的情况下实现,或者我对捕获异常很重要?

修改

这就是现在的方法(在帮助之后):

public List<UserViewModel> MapUserViewModel(MembershipUserCollection users)
        {
            List<UserViewModel> userviewmodel = new List<UserViewModel>();

            IEnumerable<Firma> firmaer = db.Firma.ToList();

            foreach (MembershipUser user in users)
            {
                UserViewModel model = new UserViewModel();
                model.CVR_Nummer = user.UserName;
                model.CreationDate = user.CreationDate;
                model.LastActivityDate = user.LastActivityDate;

                var firma = firmaer.Where(x => x.CVR_nummer == user.UserName).FirstOrDefault();

                if (firma != null)
                {
if(string.IsNullOrEmpty(firma.firma_navn))
                        model.FirmaNavn = "Missing";
else
model.FirmaNavn = firma.firma_navn;
                }

                /*if (firmaer != null)
                {
                    var firma = firmaer.Where(x => x.CVR_nummer == user.UserName).FirstOrDefault();
                    model.FirmaNavn = firma.firma_navn ?? "Mangler";   
                }
                */
                userviewmodel.Add(model);
            }
            return userviewmodel;
        }

现在有效。感谢。

4 个答案:

答案 0 :(得分:2)

你认为异常是“沉重的”并没有错 - 而且它们应该只用于真正特殊的情况。

如果firma_navn可能是null,那么这不是特殊情况,因此您应该相应地进行编码:

if (firmaer != null)
{
    var model = firmaer.Where(x => x.CVR_nummer == user.UserName).FirstOrDefault();
    if (model != null)
    {
        model.FirmaNavn = model.firma_navn ?? "Missing";
    }
}

答案 1 :(得分:1)

您需要检查LINQ语句是否返回实体以避免NullReferenceException

var firma= firmaer.Where(x => x.CVR_nummer == user.UserName).FirstOrDefault();

if (firma != null)
{
    model.FirmaNavn = 
        string.IsNullOrEmpty(firma.firma_navn) ? "Missing" : firma.firma_navn;

   // do stuff with model
}

答案 2 :(得分:0)

试试这个:

  var test= = firmaer.Where(x => x.CVR_nummeruser.UserName).FirstOrDefault();

  if(test == null)
  {
  model.FirmaNavn = "Missing";
  }
  else
  {
    model.FirmaNavn =(string)test;
  }

另见:

The C# ?? null coalescing operator (and using it with LINQ)

此致

答案 3 :(得分:0)

issued_to