Linq匿名类型与列表对象属性

时间:2013-06-25 00:18:41

标签: c# linq-to-sql anonymous-types

我有一个对象可以说它是从存储库返回的教室,但是我为我的View使用匿名类型,所以我将其转换为

 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类中,Desks是一个列表对象

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查询的所有对象的名称

2 个答案:

答案 0 :(得分:4)

您需要从数据模型中获取桌面集合,将每个桌面转换为DeskViewModel,然后将生成的序列转换为List<T>

这看起来像

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

答案 1 :(得分:0)

如果P.Desks.Name和P.Desks.Id是数组,你可以用zip这样做。

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