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();