2012-03-16 66 views
0

我有这样可空兄弟压扁对象和表妹对象,而不是收藏

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; 
} 

那里同胞和表姐可空模型

ControllerCode

[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()的情况下展平此模型?

+2

你的问题是什么? – 2012-03-16 17:29:19

+0

我用这个问题更新了帖子。但总之。如果p.Sibling或p.Sibling.Cousin为null并抛出异常。如何避免使用ToList或遍历整个结果集? – Brian 2012-03-16 18:39:41

回答

0

二者必选其一

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

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

根据您的要求。

etc ...

+0

我不能用?要么 ??没有使用ToList() – Brian 2012-03-16 20:09:12

+0

如果你只想要一个父母,那么你能不能使用'parent = parents.SingleOrDefault()'? – Phil 2012-03-16 20:19:42

+0

我试图得到父母,兄弟姐妹(如果存在的话)和兄弟姐妹的表弟(如果存在)的集合 – Brian 2012-03-16 21:39:33