Как я могу сгруппировать элементы списка, используя атрибут данных? - PullRequest
1 голос
/ 26 апреля 2020

Как я могу сгруппировать группу данных атрибута данных на основе элементов списка? Я пытаюсь избежать дублирования в моем списке на следующих условиях.

Мои условия:

  1. Если одно и то же PartyName и SubPartyName появляется несколько раз, я хочу объединить их
  2. Если одно и то же PartyName, но другое subPartyName группа по PartyName.

Ниже приведен мой код для создания списка:

    <ul id="list">
     @foreach (var item in Info){
      <li data-group="@item.PartyName" data-expanded="true"> @item.PartyName
         <ul>
             <li data-group="@item.SubPartyName" data-expanded="true">@item.subPartyName</li>
         </ul>
     </li>
     }</ul>

Мой текущий список выглядит так, как показано ниже:

Партия A

  • Подчасть A
Вечеринка A
  • Подчасть B
Вечеринка A
  • Подчасть B
Вечеринка A

Вечеринка B Вечеринка C

Хотелось бы видеть мой список как:

Вечеринка A
  • Подчасть A
  • Подчасть B
Вечеринка B Вечеринка C

1 Ответ

1 голос
/ 26 апреля 2020

Вы можете сделать это следующим образом

 public class InfoClass
{
    public string PartyName { get; set; }
    public string SubPartyName { get; set; }
}

public class NewInfoClass
{
    public string PartyName { get; set; }
    public List<string> SubPartyName { get; set; }
}

Действие контроллера

public ActionResult Index()
    {
        List<InfoClass> infos = new List<InfoClass>();
        infos.Add(new InfoClass() { PartyName = "Party A", SubPartyName = "SubParty A" });
        infos.Add(new InfoClass() { PartyName = "Party A", SubPartyName = "SubParty B" });
        infos.Add(new InfoClass() { PartyName = "Party A", SubPartyName = "SubParty B" });
        infos.Add(new InfoClass() { PartyName = "Party A" });
        infos.Add(new InfoClass() { PartyName = "Party B" });
        infos.Add(new InfoClass() { PartyName = "Party C" });

        var results = from p in infos
                      group p.SubPartyName by p.PartyName into g
                      select new { PartyName = g.Key, SubPartyNames = g.ToList().Distinct() };

        List<NewInfoClass> newList = new List<NewInfoClass>();

        int count = 0;
        foreach (var item in results)
        {
            newList.Add(new NewInfoClass()
            {
                PartyName = item.PartyName,
            });
            newList[count].SubPartyName = new List<string>();
            foreach (var item2 in item.SubPartyNames)
            {
                if (item2 != null)
                {
                    newList[count].SubPartyName.Add(item2);
                }
            }
            count++;
        }
        return View(newList);
    }

Просмотр

@model List<DemoApplication.Models.NewInfoClass>
<ul id="list">
@foreach (var item in Model)
{
    <li data-group="@item.PartyName" data-expanded="true">
        @item.PartyName
        @foreach (var item2 in item.SubPartyName)
        {
            <ul>
                <li data-group="@item2" data-expanded="true">@item2</li>
            </ul>
        }
    </li>
}

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...