[英]How to map from flat object to list using Automapper c# .net6?
[英]Update List from other list .NET6
我正在寻找一种简单的方法来使用另一个列表中的数据更新/插入/删除一个列表 (EF) 中的项目。 目前我正在做这样的事情:
public UpdateSomeList(List<Foo> foos, List<Foo> foosNew)
{
//remove missing
foos.RemoveAll(x => !foosNew.Select(xx => xx.Id).Contains(x.Id));
//update existing
var updatedCount = foosNew
.Join(foos,
@new => @new.Id, old => old.Id,
(@new, old) =>
{
old.Value = @new.Value
return old;
}
)
.Count();
//insert new
var toAdd= foosNew
.Where(x => !foos.Select(xx => xx.Id).Contains(x.Id));
foos.AddRange(toAdd);
}
有没有更优雅的方法可以做到这一点,或者我应该从我的例子中为这个用例做一个扩展,就是这样?
我倾向于使用这样的东西:
public static void MergeWith<TItem, TKey>(
this List<TItem> destination,
IEnumerable<TItem> newItems,
Func<TItem, TKey> keySelector,
Action<TItem, TItem> update)
{
var itemsToAdd = newItems.ToDictionary(keySelector);
destination.RemoveAll(x => !itemsToAdd.ContainsKey(keySelector(x)));
foreach (TItem oldItem in destination)
{
TKey key = keySelector(oldItem);
TItem newItem = itemsToAdd[key];
itemsToAdd.Remove(key);
update(oldItem, newItem);
}
destination.AddRange(itemsToAdd.Values);
}
用法:
foos.MergeWith(foosNew, x => x.Id, (oldItem, newItem) =>
{
oldItem.Value = newItem.Value;
});
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.