比较两个数据集合并更新缺失的数据集

时间:2018-01-10 15:30:02

标签: c# linq

我们说我们有这样的形式: enter image description here

我预先填好了3封电子邮件。然后我决定删除一封电子邮件,当我点击更新时,我会向API发送新的电子邮件集。

如何将字段IsDeleted更新为数据库中的字段,它们不再位于新集合中。

基本上,当我从前端电子邮件中删除时,我希望删除的内容在db中相应更新。

我的方法是: 通过Id获取当前合同的电子邮件集合,然后与前端的新集合进行比较。缺少的电子邮件ID然后将字段IsDeleted更新为true。但这将是foreach内部的预告,即O(N2)符号。 linq有什么简单的方法吗?

1 个答案:

答案 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()会做很多事情。也许有人可以在评论中帮助我。