我使用以下代码获取数据库中所有用户的列表:
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;
}
现在有效。感谢。
答案 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