Как объединить два неупорядоченных списка, используя for-each - PullRequest
0 голосов
/ 15 апреля 2020

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

Мой первый список

<ul>
@foreach (var item in rpInfo)
{    
<li data-id="@item.ID">
   @item.PartyName
   <ul>
      <li> @item.spName </li>
   </ul>
</li>
}

Мой второй список

<ul>
   @foreach (var dRPs in deletedRpHistoryInfo)
   {
   <li data-id="@dRPs.ID">
      @dRPs.PartyName
    <ul>
          <li>@dRPs.spName</li>
   </ul>
   </li>
   }
</ul>

Мне нужна ваша помощь в создании списка путем объединения два?

Спасибо!

Ответы [ 3 ]

4 голосов
/ 15 апреля 2020

В самом простом случае вам не нужны два списка, вы можете просто иметь два оператора foreach внутри одного списка ...

<ul>
foreach(...){
  <li>....</li>
}
foreach(...){
  <li>....</li>
}
</ul>

Как часть, я не уверен, какое значение вы получите встраивание второго ul внутри li либо.

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

Я так понимаю, ваши типы данных симеларны, но не идентичны, верно? Наследуют ли они от одного и того же родителя - или, может быть, стоит заставить их наследовать от одного и того же родителя (если это приносит какие-то другие преимущества). Затем вы можете создать новый временный список, набранный с общим родителем, и объединить оба списка.

При обращении к списку с различными типами данных, при обращении к необычному датамеру необходимо проверить тип текущего элемента.

Классы:

abstract internal class EmergencyEmployees 
{
    internal string Name { get; set; }
    internal int Age { get; set; }
}

internal class Police : EmergencyEmployees
{
    internal int PoliceLicence { get; set; }
}
internal class Firestarter : EmergencyEmployees
{
    internal int FirestarterLicence { get; set; }
}

Программа:

class Program
{
    static void Main(string[] args)
    {
        var officers = new List<Police>();
        var firestarters = new List<Firestarter>();

        officers.Add(new Police { Name = "Kjell", Age = 45, PoliceLicence = 12345 });
        officers.Add(new Police { Name = "Linda", Age = 42, PoliceLicence = 54321 });
        firestarters.Add(new Firestarter { Name = "Arne", Age = 32, FirestarterLicence = 4322 });
        firestarters.Add(new Firestarter { Name = "Anna", Age = 35, FirestarterLicence = 3322 });

        var templist = new List<EmergencyEmployees>();
        templist.AddRange(officers);
        templist.AddRange(firestarters);

        foreach(var ee in templist)
        {
            Console.WriteLine("Name: " + ee.Name);
            Console.WriteLine("Age: " + ee.Age.ToString());

            if(ee is Police)
            {
                var p = ee as Police;
                Console.WriteLine("Police Licence: " + p.PoliceLicence.ToString());
            }
            if (ee is Firestarter)
            {
                var p = ee as Firestarter;
                Console.WriteLine("Firestarter Licence: " + p.FirestarterLicence.ToString());
            }
            Console.WriteLine("--------------------");
        }
    }
}

Вывод:

enter image description here

0 голосов
/ 15 апреля 2020

Здесь - статья, показывающая несколько способов, которыми вы можете сделать это.

Учитывая ваш пример, вы можете использовать .Concat (), чтобы сохранить исходные данные без изменений и сохранить это все в foreach l oop. Это будет работать, только если тип, используемый в обоих списках, одинаков:

@foreach (var item in rpInfo.Concat(deletedRpHistoryInfo))
{
   // do stuff
}
...