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&lt;TKey,T&gt;。您也可以在您的组中包含其他列,并像这样访问它们:-

 (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&lt;DashboardTile&gt; 而不是List&lt;DashboardTileBO&gt;,否则我们无法从 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)

将 SQL 查询转换为使用复数和 group by 的 Linq

C# Linq group by 和 group by into 运用实例