ASP.NET MVC - 将分组数据传递到视图中

时间:2010-01-07 09:22:31

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

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

干杯

MH


- - - - - - - - 编辑

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


----编辑2 ----

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

3 个答案:

答案 0 :(得分:1)

那么,然后将数据分组并将其传递到您的控制器上的View ...

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);
}

答案 1 :(得分:1)

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

答案 2 :(得分:1)

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

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