C#EF Linq基于另一个列表创建一个列表

C#EF Linq基于另一个列表创建一个列表,c#,entity-framework,linq,C#,Entity Framework,Linq,我不确定标题是否准确描述了这种情况,但我正在努力 我有一个具有类别值的项目对象列表,我基本上希望“反转”该列表,使其成为项目中存在的类别和属于它们的项目的不同列表 因此,不是: Project1 -> Category1 Project2 -> Category2 Project3 -> Category1 我想: Category1 -> Project1 -> Project3 Category2 -

我不确定标题是否准确描述了这种情况,但我正在努力

我有一个具有类别值的项目对象列表,我基本上希望“反转”该列表,使其成为项目中存在的类别和属于它们的项目的不同列表

因此,不是:

Project1
     -> Category1
Project2
     -> Category2
Project3
     -> Category1
我想:

Category1
     -> Project1
     -> Project3
Category2
     -> Project2
目前,我正在做2条linq语句,第一条语句抓取不同的类别,第二条语句选择具有特定类别的项目,并使用具有类别和项目(项目列表)属性的对象创建一个新列表

我知道由于EF,我需要为Category/Projects对象创建一个类,但是我想知道是否可以用一条语句而不是两条语句来构建列表

谢谢

下面是我目前使用的代码

// This just pulls the unique categories belonging to the projects
string[] categories = dbm.GetProjectCategories().ToArray();
foreach(string category in categories)
{
     // This pulls the projects with the specific category
     Project[] projects = dbm.GetProjects(category).ToArray();
     // New object with the specific category and the projects belonging to it.
     projlst.Add(new CategoryProjectsItem(category, projects));
}
我知道使用EF而不是直接的ADO.NET会有点不同


这些都是从同一个项目表中提取的。

我翻了很多遍,找到了答案! 下面是一个简化的示例:

类别项目现场m

public class CategoryProjectsItem
    {
        public string Category { get; set; }
        public List<Project> Projects { get; set; }
    }

你能把你现在的密码放进去吗?
var rlt = await db.Projects2.GroupBy(c => c.Category)
                .Select(p => new CategoryProjectsItem()
                {
                    Category = p.Key,
                    Projects = p.Select(r => new Project() {
                        ID = r.ID,
                        Name = r.Name,
                        Category = r.Category
                    }).ToList()
                }).ToListAsync();