LINQ to Entities:子对象消失

时间:2009-12-16 18:58:33

标签: asp.net-mvc linq-to-entities

我试图理解为什么有时候我的子对象会消失。

在我的列表视图中,我有标准

<% foreach (var item in Model)

当我检查项目和模型时,我可以看到item.Map有几个元素。

事实上,在我的列表视图中,我可以这样做:

  <% foreach (var map in item.Map)
  <% Html.RenderPartial("MapView", map); %>

并且MapView可以访问并显示所有属性。我将子对象包括在内:

  list = from item in _entities.DataTable
           .Include("LookupTable1")
           .Include("Map")
           .Include("Map.LookupTable2") select item;
  return View("List", list);

但如果我尝试这样做:

 <%= Html.Encode(item.Map.FirstOrDefault().Field)%>

我得到一个空指针异常,而item.Map有0个元素。

任何人都可以解释为什么会这样吗?

1 个答案:

答案 0 :(得分:0)

你可能没有.Include语句。我不确定这是否解决了你的问题,但不知道空指针的原因。

就像注意:在做MVC时,你可能不应该在视图中做Linq查询(比如.FirstOrDefault)。

list = from item in _entities.DataTable
       select new
       {
           Name = item.Name
           Maps = item.Maps
       };

使用此语法,您可以在控制器中执行更多Linq查询

list = from item in _entities.DataTable
       select new
       {
           Name = item.Name
           FirstMap = item.Maps.FirstOrDefault()
       };

甚至

list = from item in _entities.DataTable
       select new
       {
           Name = item.Name
           Maps = from map in item.Maps
                  where map = somecondition
                  select map
       };