C# 匹配两个列表并从中创建对象

C# Match two lists and create object out of this

我需要一些帮助来解决一个小问题: 我有一个 List a 和一个 List b列表 b 包含一个 MigrationID,它是 列表 a 中对象的 ID 。 现在我想匹配具有相同 MigrationIDID 的对象,并从中创建一个新的 SyncObject 其中包含 obj aobj bSyncID。但我不想使用循环,因为我认为它表现不佳。

例如:

if b.MigrationID =  a.ID => create new SyncObejct(SyncID, obj a, obj b)

我的代码现在看起来有点像这样:

private class SyncObject
    {
        private Guid syncID { get; set; }
        private ItemA aItem { get; set; }
        private ItemB bItem { get; set; }
    }

public void SynchObjAToObjB<T, A>() where T : ItemA, new() where A : ItemB, new()
    {
        List<T> listA aItems;
        List<A> listB bItems;

        //here mapping

    }

列表中都填满了数据。

谢谢!

也许是这样的:

class ItemA
{
    public Guid Id { get; set; }
    public string MetaData { get; set; }
}
class ItemB
{
    public Guid MigrationID { get; set; }
    public string MetaData { get; set; }
}
class SyncObject
{
    public Guid syncID { get; set; }
    public ItemA aItem { get; set; }
    public ItemB bItem { get; set; }
}

void Main()
{
    // setup example data
    var listA  = new[] 
    { 
        new ItemA { Id = Guid.NewGuid() }, // no match in listB
        new ItemA { Id = Guid.NewGuid() }, // match in listB and will be in the result
        new ItemA { Id = Guid.NewGuid() }  // match in listB and will be in the result
    };
    var listB  = new[] { 
        new ItemB { MigrationID = listA[1].Id },
        new ItemB { MigrationID = listA[2].Id} 
    };

    // the "mapping"
    var result = listA.Join(listB, a => a.Id, b => b.MigrationID, (a, b) => 
        new SyncObject
        { 
            aItem = a, 
            bItem = b, 
            syncID = a.Id
        });
}

并且 result 将是一个包含匹配元素的列表