2010-01-07 84 views
0

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

干杯

MH


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

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


----编辑2 ----

我刚刚拿到了一个远一点这一点。使用var IQueryable itemDetList itemDetList = itemDetList.OrderBy(i => i.ItemID) 会生成一个分组列表,每个ItemID有1行,并保留对象的键入,以便我可以将它传递到强类型视图 - 是操作数据的正确方法吗?我怎么能把另一层的分组,以便它在每个.ItemID组内的.Label分组?

+0

我完全没有f *知道你想在这里实现什么。你能用一些样本来澄清这一点吗? – 2010-01-07 09:24:46

+0

你是否要求linq语法来做到这一点? – UpTheCreek 2010-01-07 09:32:35

回答

1

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

1

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

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

你如何强烈地为此输入视图? – 2010-01-07 11:51:18

+0

在这个例子中,视图将被强制键入为IEnumerable '。不过,通常情况下,我会创建一个封装列表的特定ViewModel。 – 2010-01-07 12:31:51

+0

如何使用此方法来获取其他属性以及分组键? – 2010-01-07 14:07:42

1

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

使用演示文稿模型,您已强有力地键入要在视图中显示的数据。