Linq 如何检查延迟加载属性是否返回null(重新格式化)

Linq 如何检查延迟加载属性是否返回null(重新格式化),linq,entity-framework,Linq,Entity Framework,这最初发布在这里: …但没有回答,可能是因为问题和支持代码不够清楚。我想删除它,但不确定这是否会对我的发帖能力产生影响 我认为这个问题很有价值,因此为了清楚起见,我重新制定了这个问题: 以下代码: var itinerary = context.Itineraries .Include(i => i.ItineraryDays.Select(id => id.Listing.Port.Country)) .Include(i => i.ItineraryStartDates)

这最初发布在这里: …但没有回答,可能是因为问题和支持代码不够清楚。我想删除它,但不确定这是否会对我的发帖能力产生影响

我认为这个问题很有价值,因此为了清楚起见,我重新制定了这个问题:

以下代码:

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) **
                    {
                       //
                    }

亲爱的,盖伊,假设你是一个先例,对我来说,一个可能的解决方案是:

.Include(i => i.ItineraryDays.Select(id => id.Listing.Port.Country))
这应该在命中数据库后进行评估,因为Post为null,所以Port.Country抛出

为了验证这一想法:

检查发出的sql,和/或 .Includei=>i.inventuredays.Selectid=>id.Listing.Port!=null?id.Listing.Port.Country:null
可能是d表示为空。显示更多代码,以便我们可以看到d。您不应该创建重复的问题,您应该做的是改进问题,它将进入首页,请阅读@Yuliam。我不知道该怎么做,因为在最初的帖子上留下了评论。重新制定的职位明显不同,这意味着这些职位不会与变化挂钩,并造成混乱。在将来,我将尝试以一种最小化这种“断开连接”的方式改进和重新发布…使用您的代码I get>Include path表达式必须引用在类型上定义的导航属性。使用虚线路径作为参考导航属性,选择操作符作为集合导航属性…@haim770。d绝对不是空的。我在异常发生的地方设置了一个断点来检查这一点。
.Include(i => i.ItineraryDays.Select(id => id.Listing.Port.Country))