如何使用 linq 比较两个列表并将所有列表添加到新列表 ASP.Net MVC 4

How to compare two list and add all list to new list ASP.Net MVC 4 using linq

我有两个列表
列表 A

List<test> populate = new List<test>();
{
  populate.Add(new test(){ID = 1, name="AAA", nameID=1, type=1, isSelected=false});
  populate.Add(new test(){ID = 2, name="BBB", nameID=2, type=1, isSelected=false});
  populate.Add(new test(){ID = 3, name="CCC", nameID=3, type=1, isSelected=false});
}

列表 B

    List<build> populateBuild = new List<build>();
{
  populateBuild.Add(new test(){ID = 1, name="AAA", nameID=1, type=1, isSelected=false});
  populateBuild.Add(new test(){ID = 3, name="CCC", nameID=3, type=1, isSelected=false});
}

我要实现的是:
1) 我想要新列表,(列表 C)

2) 在List C中,我想要List A中的所有数据,但是value of isSelectedList A 中,当与 List B[= 中的数据进行比较时,将更改为 TRUE 35=]
3) 意味着,如果列表B存在于列表A中,列表A中isSelected的值将更改为TRUE 并添加到 列表 C

4)如果List B在List A中不存在,它仍然会被添加到List C,但不改变isSelected值(仍然是false)。

谢谢,

我假设你的意思是 List<test> populateBuild = new List<test>();(而不是 List<build>)。您可以使用

生成第三个列表
// Get the ID's of the 2nd list
IEnumerable<int> populateBuildIds = populateBuild.Select(x => x.ID);
// Initialize the 3rd list
List<test> listC = new List<test>();
// Copy all elements from the first list and update the isSelected property
foreach (test t in populate)
{
    listC.Add(new test()
    {
        ID = t.ID, 
        name = t.name, 
        nameID = t.nameID, 
        type = t.type, 
        isSelected = populateBuildIds.Contains(t.ID) // true if also in 2nd list
    });
}

将此类添加到您的项目中:

   public static class LINQToObjectExtensions
    {
        public static void UpdateAll<T>(this IEnumerable<T> source, Action<T> action)
        {
            foreach (var item in source)
                action(item);
        }
    }

然后像这样运行它:

ListC.UpdateAll(p => p.isSelected = ListB.Contains(p));