C#EF Linq基于另一个列表创建一个清单
问题描述:
我不确定标题是否准确地描述了这种情况,但我正在尝试!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的有点不同。
这些拉来自同一个项目表。
答
我捅了一下,想通了! 这里有一个简单的例子:
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();
你可以把你当前的代码? –