C# 使用Linq关联防止空异常
在以下示例中,我得到一个空引用异常: 我有一个用户详细信息列表和相关联的PIN(1=>0..1)。当我遇到一个没有关联pin的UserDetail记录时,当访问C# 使用Linq关联防止空异常,c#,linq,entity-framework,entity-framework-5,C#,Linq,Entity Framework,Entity Framework 5,在以下示例中,我得到一个空引用异常: 我有一个用户详细信息列表和相关联的PIN(1=>0..1)。当我遇到一个没有关联pin的UserDetail记录时,当访问u.pin.UserPin时,我会得到一个空引用异常,这是可以理解的 var t = from UserDetail u in list select new { ce
u.pin.UserPin
时,我会得到一个空引用异常,这是可以理解的
var t = from UserDetail u in list
select new
{
cell = new object[] { u.UserId.ToString(), u.UserName, u.Password, u.Pin.UserPin }
});
我怎样才能防止这种情况
像这样使用null coalesce操作符是行不通的,因为u.Pin
为null,我仍然会得到null ref异常:
u.Pin.UserPin??string.Empty
嗯,您可以这样做
u.Pin == null ? string.Empty : u.Pin.UserPin
或者,如果你觉得它更可读
list.Select(u =>
{
var pin = string.Empty;
if (u.Pin != null)
{
pin = u.Pin.UserPin;
}
return new
{
Cell = new object[]
{
u.UserId.ToString(),
u.UserName,
u.Password,
pin
}
};
});
好吧,你可以
u.Pin == null ? string.Empty : u.Pin.UserPin
或者,如果你觉得它更可读
list.Select(u =>
{
var pin = string.Empty;
if (u.Pin != null)
{
pin = u.Pin.UserPin;
}
return new
{
Cell = new object[]
{
u.UserId.ToString(),
u.UserName,
u.Password,
pin
}
};
});
除了对照
null
检查链中的每个引用之外,您可以做的不多,可能使用:
除了对照
null
检查链中的每个引用之外,您可以做的不多,可能使用:
试着这样做:
from c in dataContext.Customers
from p in c.Purchases.DefaultIfEmpty( )
select new
{
c.Name,
Descript = p == null ? null : p.Description,
Price = p == null ? (decimal?) null : p.Price
};
试着这样做:
from c in dataContext.Customers
from p in c.Purchases.DefaultIfEmpty( )
select new
{
c.Name,
Descript = p == null ? null : p.Description,
Price = p == null ? (decimal?) null : p.Price
};
但是,为什么
单元格
是对象[]
?我很好奇将匿名类型与object[]
s一起使用。不是100%确定(取自一个在线示例),但我很确定它与第三方控件(jqGrid)预期的json格式有关。但是,为什么cell
是object[]
?我很好奇将匿名类型与object[]
s一起使用。不是100%确定(取自一个在线示例),但我很确定它与第三方控件(jqGrid)预期的json格式有关。