2013-06-25 5 views
0

У меня есть объект, позволяет сказать, свои классы, которые возвращаются из хранилища, но я использую анонимный тип для моей точки зрения, так что я преобразовать его, как такLinq анонимного типа с список объектов недвижимости

return from P in db.ClassRooms 
       where P.LocationId == LocationId && P.IsApproved==true 
       select new ClassRoomsViewModel 
       { 
        Id = P.Id, 
        Created = P.CreatedOn, 
        IsApproved = P.IsApproved, 
        IsDeleted = P.IsDeleted, 
        Desks = ?? 
       } 

проблема я я не уверен, как обращаться с настольным объектом.

В моем ClassRoomsViewModel парты класса является объектом списка

public class ClassRoomsViewModel{ 

    public long Id { get; set; } 
    public DateTime Created { get; set; } 
    public List<DeskViewModel> Desks { get; set; } 

} 
    public class DeskViewModel{ 

    public long Id { get; set; } 
    public string Name{ get; set; } 
} 

аудиторий DataObject является ссылкой как ссылка на объект Desk. так из приведенного выше LinQ P.Desks.Name запроса возвращает имя всех объектов в классе для запроса Linq

ответ

4

Вы должны взять на себя сбор парты из модели данных, конвертировать каждый в DeskViewModel, и преобразовать полученную последовательность в List<T>.

Это будет выглядеть примерно так

p.Desks.Select(d => new DeskViewModel { ... }).ToList() 
+0

так: Desks = p.Desks.Select (d => new DeskViewModel {...}). ToList()? – Jake

+0

@ Джейк: Именно. – SLaks

+0

Спасибо. Он компилируется, как будто он работает отлично. Надеюсь, он пройдет гладко – Jake

0

Если P.Desks.Name и P.Desks.Id массивы вы могли бы сделать это, как это с застежкой-молнией.

return from P in db.ClassRooms 
      where P.LocationId == LocationId && P.IsApproved==true 
      select new ClassRoomsViewModel 
      { 
       Id = P.Id, 
       Created = P.CreatedOn, 
       IsApproved = P.IsApproved, 
       IsDeleted = P.IsDeleted, 
       Desks = P.Desks.Name.Zip(P.Desks.Id, 
          (n, i) => new DeskViewModel { Id = i, Name = n }); 
      }