假设我们有这样的表单:

我已经预先填好了3封电子邮件。然后,我决定删除一封电子邮件,当我单击更新时,我会将新的电子邮件集合发送到API。
如何将字段IsDeleted更新为数据库中不再位于新集合中的字段。
基本上,当我从前端电子邮件中删除时,我希望那些被删除的邮件在数据库中相应地更新。
我的方法是:通过Id获取当前合同的电子邮件集合,然后与前端的新集合进行比较。缺少的电子邮件Ids会将字段IsDeleted更新为true。但这将是在O(N2)表示法的foreach内部。使用linq有什么简单的方法吗?
发布于 2018-01-10 23:47:59
当您请求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 ExceptIterator(IEnumerable first,IEnumerable second,IEqualityComparer比较器){ set Set =新集合(比较器);foreach (第二个元素中的TSource元素)set.Add(元素);foreach (第一个元素中的TSource元素) if (set.Add(元素)) yield元素;}
但是我必须承认我不能告诉你O表示法,因为set.Add()会在幕后做很多事情。也许有人可以在评论中帮我解决这个问题。
https://stackoverflow.com/questions/48190824
复制相似问题