Сглаживание обнуляемыми объектами родного брата и двоюродными братьями, а не коллекциями - PullRequest
0 голосов
/ 16 марта 2012

У меня есть такая объектная модель

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 будет привязан к Telerik Grid с помощью Ajax, это обрабатывает пейджинг. Я не хочу использовать AutoMapper, потому что я не хочу, чтобы все поля и записи возвращались.

Как выровнять эту модель без использования ToList ()?

1 Ответ

0 голосов
/ 16 марта 2012

Используйте

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

или

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

в зависимости от ваших требований.

и т. Д.

...