首页 > 解决方案 > 如何将两个列表与要在 ASP.NET Core MVC 中复制的键和值合二为一

问题描述

我有两个来自表格的列表,其中一个包含人名,另一个包含城市

像这样

public IActionResult Index([FromForm] List<string> people,[FromForm] List<string> city)
{

}

现在假设我有三个人约翰、莎拉和汤姆

我有四个城市伦敦,巴黎,DC,罗马

所以,如果用户选择 John and Sarah 和 London, Paris, DC 作为城市

这意味着约翰拥有所有三个城市,而莎拉拥有所有三个城市

我想要的是将两个列表(人员和城市)组合在一起以获得这个结果,对于每个选择的人,他们将选择所有城市,就像我上面提供的示例一样

我尝试使用 Dictionary 但由于它必须具有唯一键它不起作用并且还尝试了 ZIP 但它没有做我想要的。

有没有办法我可以做到这一点!

到目前为止我尝试了什么

public IActionResult Index([FromForm] List<string> people,[FromForm] List<string> city)
{
     List<person> personInfo = =new List<person>();
     var results =people.Zip(city).ToList();
     for(int i=0;i<results.Count;i++)
        {
            personInfo.add(new person()
               {
                   name=results[i].First,
                   city=results[i].Second
               }
        }
}

标签: c#listasp.net-coreasp.net-core-mvc

解决方案


您可以使用元组和SelectMany.

var results = people.SelectMany(person => cities.Select(city => (person, city))).ToList();

这将返回一个List<(string, string)>.

现在你可以像这样循环它:

foreach (var result in results)
{
    var person = result.person;
    var city = result.city;
}

https://docs.microsoft.com/en-us/dotnet/csharp/language-reference/builtin-types/value-tuples


推荐阅读