LINQ 查询(Group BY)一列
Posted
技术标签:
【中文标题】LINQ 查询(Group BY)一列【英文标题】:LINQ Query (Group BY) one column 【发布时间】:2015-07-14 17:27:37 【问题描述】:考虑以下类
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 等时,它说它不包含它的定义或扩展方法。
表格
【问题讨论】:
【参考方案1】:您不能直接访问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();
编辑:
另外,我猜DashboardTileBO
类中的属性DashboardTiles
应该是List<DashboardTile>
而不是List<DashboardTileBO>
,否则我们无法从 DashboardTiles 数据中获取它。
【讨论】:
谢谢,是的,现在我可以访问它了,但现在它说无法将 int 列表转换为仪表板tilebo 列表如何在此处获取我的子类别列表 @rupinder18 - 它必须给出错误Cannot convert from list of dashboardtile to list of dashboardtilebo
而不是整数列表。请检查我的更新我猜你的财产应该包括DashboardTile
而不是DashboardTileBO
以上是关于LINQ 查询(Group BY)一列的主要内容,如果未能解决你的问题,请参考以下文章
带有表连接、case 语句、计数、group by 子句的 Linq 查询
如何将此 GROUP BY / MIN SQL 查询转换为 LINQ?
LINQ-Entities Group By With Range 变量查询
DataTable中Linq查询(where,group by)