ASP.NET MVC - передача сгруппированных данных в представление - PullRequest
0 голосов
/ 07 января 2010

У меня есть объект LINQ to SQL, и я хочу сгруппировать выбранные данные и затем передать их в представление. Как правильно это сделать? Я уверен, что мне нужно сгруппировать данные, когда я выберу их, а не сгруппировать в представлении, так как это приведет к примерно 200, а не 50000 строкам, которые мне нужно будет передать в представление. Есть ли хорошие примеры этого онлайн, которые кто-нибудь видел?

Приветствия

MH


----- ----- редактировать

Я хочу немного и того, и другого: например, мой объект данных имеет (среди прочего) 2 свойства, которые я хочу извлечь, и сгруппировать их по ItemDetail.ItemID и ItemDetail.Label - это набор из тех, которые я хочу передать в свое представление. Моя фабрика данных возвращает IQueryable, который будет содержать (в реальном времени) около 100 записей для каждой комбинации ItemID / Label, и, таким образом, я хочу сгруппировать это в моем представлении, чтобы оно показывало только 1 строку для каждой комбинации ItemID / Label. Кроме того, как мне набрать мой View - я попытался передать что-то вроде var xxx = ...; возврат View (xxx); но я не уверен, как правильно набирать (если я могу) представление правильно. Я, вероятно, могу выполнить это и заставить его работать, но я хотел сделать это правильно.


---- редактировать 2 ----

Я только немного углубился в это. используя var IQueryable itemDetList itemDetList = itemDetList.OrderBy (i => i.ItemID) .GroupBy (i => i.ItemID) .Select (i => i.First ()); создает сгруппированный список с 1 строкой на ItemID и сохраняет типизацию объекта, чтобы я мог передать его в строго типизированное представление - это правильный способ манипулирования данными? Как я могу поместить другой слой группировки так, чтобы он группировался по .Label в каждой группе .ItemID?

Ответы [ 3 ]

1 голос
/ 07 января 2010

Возможно, вы захотите абстрагировать модель, которую вы передаете в представление, из объектов LINQ 2 SQL; проверьте Просмотр модели . Если это означает, что вы потенциально пишете много кода для сопоставления свойств из объектов SQL LINQ 2 с объектами вашей модели представления, тогда подумайте об использовании AutoMapper .

1 голос
/ 07 января 2010

Я бы определил презентационные модели, которые представляют ваши группы в вашем представлении. Заполните модели презентаций LINQ и передайте их вашему представлению.

С презентационными моделями вы строго напечатали данные для отображения на экране.

1 голос
/ 07 января 2010

Ну, тогда сгруппируйте данные и передайте их в свой 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);
}
...