【问题标题】:Flattening with nullable sibling objects & cousin objects, not collections用可为空的兄弟对象和表亲对象展平,而不是集合
【发布时间】:2012-03-16 17:24:56
【问题描述】:

我有一个这样的对象模型

public class Parent{
 public int Id;
 public string Name;
 public Child Sibling 
}

public class Sibling {
 public int Id;
 public string Name;
 public Cousin Cousin
}

public class Cousin{
 public int Id;
 public string Name;
 public DateTime CreatedDate;
}

我正在尝试展平或投影?像这样的模型

public class ViewModelSibling {
   public int Id;
   public string Name;
}
public class ViewModel{
 public int ParentId;
 public string ParentName;
 public ViewModelSibling Sibling;
 public ViewModelSibling Cousin;
 public DateTime? CousinCreatedDate;
}

其中兄弟和表亲可以为空

控制器代码

 [HttpPost]
 public virtual ActionResult GetGridItems()
 {
     IQueryable<Parent> parents = GetParentsWhereCriteriaMet();
     var data = parents.Select( p => new ViewModel{
                       ParentId = p.Id,
                       ParentName = p.Name,
                       Sibling = new ViewModelSibling  { Id = p.Sibling.Id, Name = p.Sibling.Name},// if p.Sibling is null and exception is thrown
                       Cousin= new ViewModelSibling  {Id =p.Sibling.Cousin.Id, Name = p.Sibling.Cousin.Name}// if p.Sibling or p.Sibling.Cousin are null and exception is thrown
                       CousinCreatedDate = p.Sibling.Cousin.CreatedDate
                       } )
     return new JsonResult { Data = data };
 }

我试图避免使用 ToList(),因为我不希望返回所有父记录。 ViewModel 将使用 Ajax 绑定到 Telerik Grid,这将处理分页。 我不想使用 AutoMapper,因为我不想返回所有字段和记录。

如何在不使用 ToList() 的情况下展平此模型?

【问题讨论】:

  • 我用一个问题更新了帖子。但简而言之。如果 p.Sibling 或 p.Sibling.Cousin 为 null 并且抛出异常。如何在不使用 ToList 或循环遍历整个结果集的情况下避免这种情况?

标签: asp.net-mvc linq entity-framework automapper flatten


【解决方案1】:

使用任一

Sibling = p.Sibling == null ? null : new ViewModelSibling(...)

或

Sibling = new ViewModelSibling{ Id = p.Sibling == null ? 0 : p.Sibling.Id, etc ... }

取决于您的要求。

等等……

【讨论】:

  • 我不能用?或者 ??不使用 ToList()
  • 如果你只想要一个单亲,那么你能不使用'parent = parents.SingleOrDefault()'吗?
  • 我正在尝试获取父母、兄弟姐妹(如果存在)和兄弟姐妹的表弟(如果存在)的集合
  • 好的,你调查过 Include("") 吗?例如parents.Include("Sibling").Include("Cousin").Select(...) 然后使用 ?: 或 ??
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-12-01
  • 1970-01-01
  • 1970-01-01
  • 2021-11-24
  • 1970-01-01
  • 2011-07-23
相关资源
最近更新 更多