Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/319.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/linq/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 比较两个数据集合,并更新丢失的数据以删除_C#_Linq - Fatal编程技术网

C# 比较两个数据集合,并更新丢失的数据以删除

C# 比较两个数据集合,并更新丢失的数据以删除,c#,linq,C#,Linq,假设我们有这个表格: 我已经预填了3封电子邮件。然后我决定删除一封电子邮件,当我单击“更新”时,我会向API发送新的电子邮件集合 如何将字段更新为数据库中不再在新集合中的字段 基本上,当我从前端电子邮件中删除时,我希望删除的邮件在db中相应地更新 我的做法是: 按Id获取当前合同的电子邮件收集,然后与前端的新收集进行比较。缺少的电子邮件ID然后更新字段被删除为true。但这将是foreach内部的foreach,它是O(N2)表示法。linq有什么简单的方法吗?当您要求linq解决方案时,您可

假设我们有这个表格:

我已经预填了3封电子邮件。然后我决定删除一封电子邮件,当我单击“更新”时,我会向API发送新的电子邮件集合

如何将字段更新为数据库中不再在新集合中的字段

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

我的做法是:
按Id获取当前合同的电子邮件收集,然后与前端的新收集进行比较。缺少的电子邮件ID然后更新字段被删除为true。但这将是foreach内部的foreach,它是O(N2)表示法。linq有什么简单的方法吗?

当您要求linq解决方案时,您可以使用

例如:

var oldList = new List<string> { "A", "B", "C" };
var newList = new List<string> { "A", "C" };

var deletedValues = oldList.Except(newList ); // deletedValues = { "B" }

但是我必须承认我不能告诉你关于O符号的事情,因为
set.Add()
会在幕后做很多事情。也许有人能在评论中帮我解决这个问题

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;
}