2017-04-12 167 views
1

我不确定标题是否准确地描述了这种情况,但我正在尝试!C#EF Linq基于另一个列表创建一个清单

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

所以,相反的:

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

我想:

Category1 
    -> Project1 
    -> Project3 
Category2 
    -> Project2 

目前我正在做2条LINQ语句,第一个抓住了不同的类别,第二个具有特定选择的项目类别并使用具有类别和项目(项目列表)属性的对象创建新列表。

我知道我需要为EF/Category创建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的有点不同。

这些拉来自同一个项目表。

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