我预先填好了3封电子邮件。然后我决定删除一封电子邮件,当我点击更新时,我会向API发送新的电子邮件集。
如何将字段IsDeleted更新为数据库中的字段,它们不再位于新集合中。
基本上,当我从前端电子邮件中删除时,我希望删除的内容在db中相应更新。
我的方法是: 通过Id获取当前合同的电子邮件集合,然后与前端的新集合进行比较。缺少的电子邮件ID然后将字段IsDeleted更新为true。但这将是foreach内部的预告,即O(N2)符号。 linq有什么简单的方法吗?
答案 0 :(得分:1)
当您要求Linq解决方案时 - 您可以使用System.Linq.Enumerable.Except。
例如:
var oldList = new List<string> { "A", "B", "C" };
var newList = new List<string> { "A", "C" };
var deletedValues = oldList.Except(newList ); // deletedValues = { "B" }
之后,您可以遍历deletedValues
并设置IsDeleted = true;
根据Reference Source - Enumerable.cs,将执行以下代码。
static IEnumerable<TSource> ExceptIterator<TSource>(IEnumerable<TSource> first, IEnumerable<TSource> second, IEqualityComparer<TSource> comparer) { Set<TSource> set = new Set<TSource>(comparer); foreach (TSource element in second) set.Add(element); foreach (TSource element in first) if (set.Add(element)) yield return element; }
但我必须承认我无法告诉你关于O符号的事情,因为set.Add()
会做很多事情。也许有人可以在评论中帮助我。