C#EF Linq根据另一个列表创建一个列表

时间:2017-04-12 01:28:31

标签: c# entity-framework linq

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

我有一个具有Category值的Project对象列表,我基本上想要“反转”列表,使其成为项目中存在的类别和属于它们的项目的明确类别列表。

所以,而不是:

Project1
     -> Category1
Project2
     -> Category2
Project3
     -> Category1

我想:

Category1
     -> Project1
     -> Project3
Category2
     -> Project2

目前我正在做两个linq语句,第一个是抓住不同的类别,第二个是选择具有特定类别的项目,并创建一个包含Category和Projects(项目列表)属性的对象的新列表。

我知道由于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会有所不同。

这些来自同一个项目表。

1 个答案:

答案 0 :(得分:1)

我捅了更多,然后想出来了! 这是一个简单的例子:

<强> CategoryProjectsItem

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