我有這將父集合的子集,以適當的父母映射方法應用子集匹配父母父集合的
public static void ApplyParentChild<TParent, TChild, TId>(
this IEnumerable<TParent> parents, IEnumerable<TChild> children,
Func<TParent, TId> id, Func<TChild, TId> parentId,
Action<TParent, TChild> action
)
{
var lookup = parents.ToDictionary(id);
foreach (var child in children)
{
TParent parent;
if (lookup.TryGetValue(parentId(child), out parent))
action(parent, child);
}
}
&這炒鍋如果我叫下面的方法(有項目在它的階段列表)
projects.ApplyParentChild(phases, p => p.ProjectId, c => c.ProjectId, (p, c) => p.ProjectPhases.Add(c));
但我經常會得到一個情況,我有一個階段有項目引用。所以我把它叫做
phases.ApplyParentChild(projects, p => p.ProjectId, c => c.ProjectId, (p, c) => p.project=c);
這個失敗。這是因爲parents.ToDictionary(id)
未能獲得唯一標識符並將錯誤返回爲「已添加具有相同密鑰的項目」。
我該如何處理這個問題?我不是一個linq大師。誰能幫我嗎 ?
有沒有什麼好的理由說明你(很差)重新實現Linq連接? – spender
HW是一個linq連接? –