【问题标题】:C# MVC Model Data Group on Razor ViewRazor 视图上的 C# MVC 模型数据组
【发布时间】:2017-11-21 16:39:28
【问题描述】:

我在如何处理具有重复数据的模型时遇到了一些问题,我想在视图的单个表行中显示每个条目。

例如

模型数据如下所示:

User | Access  
1234 | SuperUser  
1234 | Admin  
2345 | Analyst  
3456 | Analyst  
3456 | SuperUser  

我将模型传递到我的视图,但循环遍历模型中的每个用户会为每个用户提供多个条目,有没有办法使用 GroupBy 在单行上显示每个用户,如下所示:

User | Access  
1234 | SuperUser, Admin  
2345 | Analyst  
3456 | Analyst, SuperUser  

【问题讨论】:

  • 你能指定模型的实际外观吗?例如。它是一个 List 对象,其中 UserAccess 具有“用户”和“访问”字段吗?

标签: c# linq razor model-view-controller


【解决方案1】:

假设你的数据结构类有 2 个这样的属性

public class YourClass
{
    public int User { set; get; }
    public string Access { set; get; }
}

您可以对对象的User 属性进行分组。您可以使用 LINQ GroupBy 方法,并在 LINQ 表达式的投影部分,使用 string.Join 为 Access 属性值创建逗号分隔列表值

var flatRecords = new List<YourClass>
{
    new YourClass () {User = 1234, Access = "SuperUser"},
    new YourClass () {User = 1234, Access = "Admin"},
    new YourClass () {User = 33456,Access = "Analyst"}
};

List<YourClass> grouped = flatRecords.GroupBy(a => a.User, d => d,
                                               (k, v) => 
           new YourClass {   User = k, 
                             Access = string.Join(",", v.Select(d => d.Access)) 
                         })
                                     .ToList();

【讨论】:

  • 谢谢,如果我在模型中有另外几个属性(ID 和登录)但我不想在视图上显示它们,那么 LINQ 需要如何更改。
  • 在 LINQ 语句的投影部分映射的任何属性都将在结果集中设置。因此,如果您不想要 IDLOGIN ,请不要设置。如果是 MVC,我强烈建议您创建一个视图模型并在投影中使用它(您可以使用问题中的YourClass)。我相信你不能在 LINQ 投影中使用 EF 实体类。
【解决方案2】:

我认为如果你可以使用 Linq 会更好 这里是例子

创建一个新的视图模型类

 public class MyNewView
    {
        public string User { get; set; }
        public string Access  { get; set; }
    } 

在你的视图控制器中添加这个 Linq "mylist 是你的重复值列表"

var NewViewModel =  mylist .select ( c=> new MyNewView {   

   user = c.user ,
   Access = String.Join(",",mylist.where( x=> x.user ==  c.user) .select( x => x Access ) .tolist() )    


} ).tolist()

然后

return View(NewViewModel);

【讨论】:

    猜你喜欢
    • 2012-02-12
    • 2010-10-03
    • 2020-04-24
    • 2014-04-09
    • 1970-01-01
    • 2014-01-07
    • 2015-07-07
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多