【问题标题】:ASP.NET MVC - Passing Grouped data into a ViewASP.NET MVC - 将分组数据传递到视图中
【发布时间】:2010-01-13 17:37:19
【问题描述】:

我有一个 LINQ to SQL 对象,我想对选定的数据进行分组,然后将其传递到视图中。这样做的正确方法是什么?我确定我需要在选择数据时对数据进行分组,而不是在视图中对其进行分组,因为这将导致我需要将大约 200 行而不是 50000 行传递到我的视图中。网上有没有人见过的很好的例子?

干杯

MH


-----编辑-----

我想要两者兼而有之:- 例如,我的数据对象(除其他外)有 2 个我想要提取和分组的属性,ItemDetail.ItemID 和 ItemDetail.Label - 这是一组我想要传递到我的视图中的属性。我的数据工厂返回一个 IQueryable,它将包含(实时)每个 ItemID/Label 组合的大约 100 条记录,因此我想在我的视图中对其进行分组,以便每个 ItemID/Label 组合只显示 1 行。 另外,我如何输入我的视图 - 我尝试过传入类似 var xxx = ...;返回视图(xxx);但我不确定如何正确输入(如果可以的话)视图。我可能可以这样做并让它工作,但我想正确地做到这一点。


----编辑 2----

我对此有更深入的了解。 使用 var IQueryable itemDetList itemDetList = itemDetList.OrderBy(i => i.ItemID).GroupBy(i => i.ItemID).Select(i => i.First()); 生成一个分组列表,每个 ItemID 有 1 行,并保留对象类型,以便我可以将它传递给强类型视图 - 这是操作数据的正确方法吗?如何放置另一层分组,以便在每个 .ItemID 组中按 .Label 分组?

【问题讨论】:

  • 我完全不知道你想在这里实现什么。你能用一些样本澄清一下吗?
  • 您是否要求使用 linq 语法来执行此操作?

标签: asp.net-mvc linq-to-sql design-patterns


【解决方案1】:

您可能希望从 LINQ 2 SQL 对象中抽象出传递给视图的模型;查看View Model Pattern。如果这意味着您发现自己可能会编写大量代码来将属性从 LINQ 2 SQL 对象映射到您的 View Model 对象,那么请考虑使用AutoMapper

【讨论】:

    【解决方案2】:

    好吧,然后将数据分组并从控制器传递到您的视图...

    public ViewResult Foo()
    {
        var data = this.GetGroupedData();
        return this.View(data);
    }
    
    private IEnumerable<Bar> GetGroupedData()
    {
        return from x in GetData()
               group x by x.Baz into g
               select new Bar(g.Key);
    }
    

    【讨论】:

    • 你如何强烈键入这个视图?
    • 在本例中,视图的强类型为IEnumerable&lt;Bar&gt;。不过,通常情况下,我会创建一个封装列表的特定 ViewModel。
    • 如何使用这种方法获取其他属性以及分组键?
    【解决方案3】:

    我会定义在您的视图中代表您的组的 Presentation-Models。用 LINQ 填充 Presentation-Models 并将它们传递给您的视图。

    使用 Presentation-Models,您可以在视图中显示强类型数据。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2017-04-23
      • 2012-02-02
      • 2011-11-08
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-02-11
      相关资源
      最近更新 更多