2012-03-16 67 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