如何使用for-each合并两个无序列表

时间:2020-04-15 05:29:52

标签: c# asp.net foreach

我的页面上有两个显示相似数据的列表,我使用for-each来显示列表。我可以在单个列表中显示

我的第一个列表

<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 个答案:

答案 0 :(得分:4)

最简单的是,您不需要两个列表,只需在一个列表中包含两个foreach语句即可。

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

顺便说一句,我不确定您将第二个ul嵌入li中的值是什么。

答案 1 :(得分:1)

我认为您的数据类型相似但不相同,对吗?他们是从同一个父母那里继承的?还是值得让他们从同一个父母那里继承(如果带来其他好处)。然后,您可以创建新的临时列表,并使用公共父级键入,然后在两个列表中合并。

在输入具有不同数据类型的列表时,在访问非公共数据成员时,您需要检查当前项目的类型。

课程:

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

答案 2 :(得分:-1)

Here是一篇文章,显示了几种执行此操作的方法。

给出您的示例,您可以使用.Concat(),那样您就可以保持原始数据不变,并将其全部保留在foreach循环中。仅当两个列表中使用的类型相同时,这才起作用:

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