2013-06-25 67 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; } 
} 

教室數據對象是作爲鏈接到桌面對象的引用。 所以從上面的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

@Jake:的確如此。 – 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 }); 
      }