C# Linq按多个字段分组并展平列表

C# Linq按多个字段分组并展平列表,c#,linq,group-by,C#,Linq,Group By,我得到了以下数据 标题|有用 ttitle1 |是 ttitle1 |是 ttitle1 |否 ttitle2 |是 我想对上述数据进行分组并将其展平,以便得到以下结果: 标题|有用计数|无效计数 标题1 | 2 | 1 标题2 | 1 | 0 尝试了此操作,但未产生正确的结果: var query = (from r in ratings group r by new { r.ArticleTitle, r.Useful } into results

我得到了以下数据

标题|有用 ttitle1 |是

ttitle1 |是

ttitle1 |否

ttitle2 |是

我想对上述数据进行分组并将其展平,以便得到以下结果:

标题|有用计数|无效计数 标题1 | 2 | 1

标题2 | 1 | 0

尝试了此操作,但未产生正确的结果:

 var query = (from r in ratings
                    group r by new { r.ArticleTitle, r.Useful } into results
                    group results by new { results.Key.ArticleTitle } into results2
                    from result in results2
                    select new
                    {
                        Title = result.Key.ArticleTitle,
                        Yes = result.Select(i => i.Useful).Count(),
                        No = result.Select(i => i.Useful == false).Count()
                    });

有什么帮助吗?

在我看来,唯一的问题是您要分组两次。我希望这能奏效:

var query = from rating in ratings
            group rating by rating.ArticleTitle into g
            select new
            {
                Title = g.Key,
                Yes = g.Count(r => r.Useful),
                No = g.Count(r => !r.Useful)
            };
或不在查询表达式形式中:

var query = ratings.GroupBy(r => r.ArticleTitle,
                            (key, rs) => new
                            {
                                Title = key,
                                Yes = rs.Count(r => r.Useful),
                                No = rs.Count(r => !r.Useful)
                            });

在我看来,唯一的问题是你要分组两次。我希望这能奏效:

var query = from rating in ratings
            group rating by rating.ArticleTitle into g
            select new
            {
                Title = g.Key,
                Yes = g.Count(r => r.Useful),
                No = g.Count(r => !r.Useful)
            };
或不在查询表达式形式中:

var query = ratings.GroupBy(r => r.ArticleTitle,
                            (key, rs) => new
                            {
                                Title = key,
                                Yes = rs.Count(r => r.Useful),
                                No = rs.Count(r => !r.Useful)
                            });

你不需要两次分组就能得到想要的结果。一组就可以了:

var query = (from r in ratings
             group r by new { r.ArticleTitle } into g
             from result in groups
             select new
             {
                 Title = result.Key,
                 Yes = result.Select(i => i.Useful).Count(),
                 No = result.Select(i => !i.Useful).Count()
             });

你不需要两次分组就能得到想要的结果。一组就可以了:

var query = (from r in ratings
             group r by new { r.ArticleTitle } into g
             from result in groups
             select new
             {
                 Title = result.Key,
                 Yes = result.Select(i => i.Useful).Count(),
                 No = result.Select(i => !i.Useful).Count()
             });

那么这会产生什么结果呢?为什么要分组两次呢?那会产生什么结果呢?为什么要分组两次?我在linq中没有得到所需的左连接输出。你能帮我解决这个问题吗?请:我在linq中没有得到所需的左连接输出。你能帮我解决这个问题吗