首页 > 解决方案 > 根据列表的元素对同一对象进行分组

问题描述

我有以下类型的对象列表,Application如下所示:

public class Application
    {
        public int AppId { get; set; }
        public List<Question> Questions { get; set; }
    }

我想要做的是将它们映射到如下类型的对象Section

public class Section
       {
            public List<int> AppIds { get; set; }
            public List<Question> Questions { get; set; }
        }

通过根据以下规则对它们进行分组:将所有相同的问题收集到包含这些问题的 AppId 列表下。示例性输入和输出:

Input: A1(Q1,Q2,Q3), A2(Q1,Q2), A3(Q1,Q3), A4(Q1). 
Output: A1,A2,A3,A4(Q1), A1,A2(Q2), A1,A3(Q3)

在LINQ中可以做到吗?还是我必须自己编写逻辑?

标签: c#linqgroup-by

解决方案


也许有一种更简单的方法,但这是LINQ我写的第一个查询,至少应该足以让您入门。首先,我将您的问题和 appid 展平,然后按问题重新分组,并按问题列出您的 appid。请注意,您必须先填充您List的应用程序,然后才能运行。

List<Application> app = new List<Application>();
var output = (from a in app.SelectMany(p => p.Questions.Select(z => new {z, p.AppId})
group a.AppId by new 
{
a.Questions
} into combined
select new 
{
combined.Key.Questions,
combined.ToList()
});

推荐阅读