这最初发布在这里:
How to check if a lazy loading propery returns null
..但没有回答,可能是由于问题和支持代码不够清楚。 (我想删除它,但不确定这是否会影响我发布的能力)
我认为这个问题很有价值,所以我为了清楚起见重新制定了这个问题:
以下代码:
var itinerary = context.Itineraries
.Include(i => i.ItineraryDays.Select(id => id.Listing.Port.Country))
.Include(i => i.ItineraryStartDates)
.Where(i => i.Id == Id).FirstOrDefault();
将数据传递给视图,该视图会抛出异常'对象引用未设置为对象的实例',代码如下**:
@foreach (var d in Model.ItineraryDays)
{
<tr>
<td>
@Html.DisplayFor(model => d.DayPlus1)
</td>
<td>
@Html.ActionLink(d.Listing.Name, "Details", "Port", new { Id = d.ListingId }, null)
</td>
<td>
@if (d.Listing != null) **
{
//
}
有些观点:
有谁能告诉我为什么抛出异常?
更新 刚刚发现我的代码在某些情况下处理空值而不抛出异常,但并不是在每种情况下都是如此。例如1)好2)例外
1) @Html.DisplayFor(model => d.Listing.Port.Country.Name)
2) @Html.ActionLink(d.Listing.Port.Country.Name, "Details", "Country", new { Id = d.Listing.Port.Country.Id }, null)
问候,盖伊
答案 0 :(得分:0)
假设您有先例,对我来说,一个可能的解决方案是:
.Include(i => i.ItineraryDays.Select(id => id.Listing.Port.Country))
这应该在命中数据库之后进行评估,并且,当Post为null时,Port.Country将抛出。
验证这个想法:
.Include(i => i.ItineraryDays.Select(id => id.Listing.Port != null ?id.Listing.Port.Country : null))