0

私は2つのリスト
リスト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)リスト Cでは、リスト A のすべてのデータが必要ですが、リスト Aの isSelectedの値はTRUEに変更されます。リスト Bのデータと比較 3)リスト B がリスト A に存在する場合、リスト Aの isSelectedの値が TRUEに変更され、リスト Cに追加されます。 4) リスト B がリスト A に存在しない場合、それは引き続きリスト C に追加されますが、isSelected 値は変更されません (false のまま)。




ありがとうございました、

4

2 に答える 2

1

私はあなたが意味していると思いますList<test> populateBuild = new List<test>();(ではないList<build>)。を使用して3番目のリストを生成できます

// 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
    });
}
于 2016-07-14T02:43:21.253 に答える
0

Adiciona esta classe no seu projeto:

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

depois executa desta maneira:

ListC.UpdateAll(p => p.isSelected = ListB.Contains(p));
于 2016-07-14T20:34:39.347 に答える