我将MVC 4与实体框架结合使用。我有以下问题。
视图中的原始数据以这种方式显示:
id | name| email| roles| modules
1|name1| email1| role1| module1
1| name1| email1| role2| module1
1| name1| email1|role3| module1
我需要做的是像这样的行盘
id | name| email| roles| modules
1|name1| email1| role1, role2, role3| module1
我认为在控制器中制作它比在视图中制作它更好。如果是这样,如何使用Linq或简单列表?
答案 0 :(得分:3)
您需要的只是GroupBy
: -
IEnumerable<TestForms.Models.v_HmsUnacceptedForms> result = data.GroupBy(x => x.id)
.ToList() //To force run projection in memory.
.Select(x =>
{
var firstRecord = x.FirstOrDefault();
return new TestForms.Models.v_HmsUnacceptedForms
{
id = x.Key,
name = firstRecord != null ? firstRecord.name : String.Empty,
email = firstRecord != null ? firstRecord.email: String.Empty,
roles = String.Join(",",x.Select(z => z.roles),
modules = firstRecord != null ? firstRecord.modules : String.Empty
};
});
在这里,我已经考虑过,对于每个ID,您需要第一个name,email and modules
列。如果不是这种情况,您可以按多个列进行分组,而不是像new { x.id, x.name, x.email }
这样的ID。