簡體   English   中英

根據ID將對象列表從一個列表復制到另一個列表

[英]Copy a list of objects from one list to another based on id

基本上我有兩個對象列表。 我需要執行類似基於列表之間匹配的id屬性從第二個列表更新第一個列表的操作。 我如何在不使用foreach循環的情況下實現這一目標。

public class Test1
{
    int Id;
    List<Test2> Test2Values;
}

public class Test2
{
    int Test1Id;
    string valueString;
}

public class Main
{
    public void Test()
    {
        List<Test1> testList1 = GetTest1();
        List<Test2> testList2 = GetTest2();

        foreach(Test1 t in testList1)
            t.Test2Values = testList2.Where(tl => tl.Test1Id == t.Id).ToList();
    }
}

這應該夠了吧。 首先從testList2構建一個字典。 通過Test1Id對其進行Test1Id 然后從testList1選擇每個項目。 檢查它的ID是否在字典中。 如果是這樣,請用新值替換列表,否則保留舊值。

var dict = testList2
            .GroupBy(t2 => t2.Test1Id)
            .ToDictionary(
                gr => gr.Key, 
                gr => gr.ToList());

testList1
    .Select(t1 => 
    { 
        t1.Test2Values = dict.ContainsKey(t1.Id) ? dict[t1.Id] : t1.Test2Values;
        return t1;
    })
    .ToList();

使用下面的代碼獲取兩個列表之間的公共項目,然后處理下一個:

 var result = testList1.Where(p => testList2.Any(p2 => p2.Id == p.Id));

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM