考虑以下课程
public class DashboardTile
{
public int ID { get; set; }
public int? CategoryID { get; set; }
public string Name { get; set; }
public string Description { get; set; }
}
public class DashboardTileBO : DashboardTile
{
public bool IsChecked { get; set; }
public List<DashboardTileBO> DashboardTiles { get; set; }
}
我有一些瓷砖列表,其中一些瓷砖是其他瓷砖的子。现在我想以这样一种方式显示我的瓷砖列表,如果它有子节点,它会被添加到列表中。
查询我正在尝试
var allDashBoardTiles = (from a in context.DashboardTiles
group a by a.CategoryID into b
select new BusinessObjects.DashboardTileBO
{
ID = a.ID,
Name = a.Name,
Description = b.Description,
DashboardTiles = b.ToList(),
}).ToList();
var list = context.DashboardUserTiles.Where(a => a.UserID == userId).Select(a => a.DashboardTileID).ToList();
allDashBoardTiles.ForEach(a => a.IsChecked = list.Contains(a.ID));
现在在上面的查询中,当我使用group子句时,如果我使用a.ID,a.Name等,则表示它不包含它的定义或扩展方法。
表
答案 0 :(得分:0)
您无法直接访问a
的属性,因为GroupBy
会返回IGrouping<TKey,T>
。您也可以在组中包含其他列,并按如下方式访问它们: -
(from a in context.DashboardTiles
group a by new { a.CategoryID, a.ID, a.Name } into b
select new BusinessObjects.DashboardTileBO
{
ID = b.Key.ID,
Name = b.Key.Name,
DashboardTiles = b.ToList(),
}).ToList();
修改强>
另外,我想DashboardTiles
类中的属性DashboardTileBO
应该是List<DashboardTile>
而不是List<DashboardTileBO>
,否则我们无法从DashboardTiles数据中获取它。