如何使用 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 isSelected在 List 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));
我有两个列表
列表 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 isSelected在 List 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));