首页 > 解决方案 > 两个字典的最佳合并(但首先是异步输出问题)

问题描述

我有一个字典 A,需要从 B 添加元素,两者都是相同的 IDictionary 类型。如果有任何后果,则 A 为空,因此没有要保留的数据或潜在的密钥冲突。

由于其他原因(我使用的异步方法不支持 out 参数并且我不能使用Task<(bool, IDictionary<TKey, T>)>方法,因为我必须多次(多次)并行调用此任务作为List<Task<bool>>对于最终具有 WhenAll/Aggregate 结果的不同查找对象。T类型没有共同的祖先,是 POCO 类,我真的不想将它们全部从IDictionary<bool, object>. 所以我必须给异步方法一个已经创建的字典来填充。

我使用的方法是手动迭代结果并将元素添加到已经预先创建的未提供的字典中。

static async Task<bool> InternalLoadSqlDictionary<TKey, T>(IContextFactory dbContextFactory, IDictionary<TKey, T> outputSink, Func<T, TKey> keySelector) where T: class 
    {
    ...

    await using var dbc = dbContextFactory.GetContext();
    var result = await dbc.Set<T>().AsNoTracking().ToListAsync().ConfigureAwait(false);
    foreach (var e in result) outputSink.Add(keySelector(e), e);
    return true;

这对我来说似乎不是最理想的。有没有办法更有效地做到这一点,用新数据重新初始化字典而不破坏引用等。然后我可能会使用.ToDictionaryAsync(keySelector)而不是使用临时列表。

标签: c#performancelinq

解决方案


推荐阅读