2014-10-27 3 views
0

У меня есть таблица в моей базе данных, которая выглядит как это:MVC Foreach отчетливое значения из базы данных

Ссылка

LinksID

TvID (иностранный ключ)

Сезон

Episode

Ссылка

Теперь я пытаюсь иметь Еогеасп заявление, на мой взгляд, так что это будет выглядеть примерно так на моей странице.

сезон 1

Эпизод 1

Эпизод 2

Эпизод 3

сезон 2

Эпизод 1

Эпизод 2

Эпизод 3

Однако все, что я могу получить это

Сезон 1 Эпизод 1

Сезон 1 Эпизод 2

Сезон 1 Эпизод 3

Сезон 2 Эпизод 1

Сезон 2 Эпизод 2

Сезон 2 Эпизод 3

Так после того, как некоторые прибегая к помощи я сейчас получил мой foreach, как это, однако он, очевидно, только отображает первый эпизод, который не то, что мне нужно.

@foreach (var item in Model.Links.GroupBy(x => x.Season).Select(s => s.First())) 
{ 
<p>Season @Html.DisplayFor(modelItem => item.Season) @Html.DisplayFor(modelItem => item.Episode)</p> 
} 

, что я делаю неправильно?

+1

- вы пробовали @foreach (пункт уаг в Model.Links.GroupBy (х => х. Сезон). Выберите (s => s)). - Или вы можете создать словарь, в котором ключ является сезоном, а значение - все эпизоды этого сезона. –

+0

Если я использую foreach, о котором вы упомянули, я получаю эту ошибку '' System.Linq.IGrouping 'не содержит определения для «Сезон», а метод расширения «Сезон» не принимает первый аргумент type 'System.Linq.IGrouping ' можно найти (вам не хватает директивы using или ссылки на сборку?) '. Как мне создать идею словаря, поскольку я никогда не делал этого до – niko619

ответ

2

Вы хотите что-то вроде этого:

@{ 
    var myList = Model.Links 
     .GroupBy(x => x.Season) 
     .Select(x => new { Season = x.Key, Episodes = x }); 
} 
@foreach (var season in myList) 
{ 
    <strong>Season @Html.DisplayFor(modelItem => season.Season)</strong> 
    foreach(var episode in season.Episodes) 
    { 
     @Html.DisplayFor(modelItem => item.Episode) 
    } 
} 
+0

Да, что сработало, спасибо. Именно поэтому я лучше понимаю, что делает этот раздел на самом деле? 'Select (x => new {Season = x.Key, Episodes = x});' – niko619

+0

вы указываете, что вы выбираете из группы, которая вас интересует. В этом случае вам нужно знать, в каком сезоне (поэтому вы выбираете «x.Key», «Season», который был ключевым для группировки). Другое, что вам нужно, это результаты группировки, которые являются фактическими эпизодами. Итак, вы перечисляете каждый сезон, а затем перечисляете каждый эпизод в сгруппированном сезоне. Это, вероятно, поможет: http://stackoverflow.com/questions/7325278/group-by-in-linq – DLeh

0

Просто попробуйте этот код

  @foreach (var item in Model.Links.GroupBy(x => x.Season).tolist())) 
    { 
    Season @Html.DisplayFor(modelItem => item.Season) 

    @foreach (var items in Model.Links.where(z=>z.season==itme.season)) 

    { 
      @Html.DisplayFor(modelItem => item.Episode) 
    } 
    } 
+0

Ваше форматирование кажется немного немного –

Смежные вопросы