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# 使用LINQ从2个集合中检索非重复项_C#_Linq - Fatal编程技术网

C# 使用LINQ从2个集合中检索非重复项

C# 使用LINQ从2个集合中检索非重复项,c#,linq,C#,Linq,背景:我有两个具有不同名称属性(两个字符串)的不同类型对象的集合。Collection1中的对象有一个名为Name的字段,Collection2中的对象有一个名为field的字段 我需要比较这两个属性,并从Collection1中获取项目,其中Collection2中没有基于该字符串属性的匹配项(Collection1将始终具有更多或相等数量的项目。完成后,所有项目都应在Collection2中按名称/字段进行匹配) 问题:我用列表找到了答案,它们帮了我一点忙(值得一提的是,我用的是集合)。我确

背景:我有两个具有不同名称属性(两个字符串)的不同类型对象的集合。
Collection1
中的对象有一个名为
Name
的字段,
Collection2
中的对象有一个名为
field
的字段
我需要比较这两个属性,并从
Collection1
中获取项目,其中
Collection2
中没有基于该字符串属性的匹配项(
Collection1
将始终具有更多或相等数量的项目。完成后,所有项目都应在
Collection2
中按名称/字段进行匹配)

问题:我用列表找到了答案,它们帮了我一点忙(值得一提的是,我用的是集合)。我确实找到了适合我的方法,但是我想将我所做的工作从查询语法(如果它叫什么?)转换为LINQ查询。见下文:

//Query for results. This code is what I'm specifically trying to convert.
var result = (from item in Collection1
              where !Collection2.Any(x => x.ColumnName == item.FieldName)
              select item).ToList();  

//** Remove items in result from Collection1**
//...
我对这两种语法都不太熟悉(正在研究),但我想我基本上理解了这两种语法的作用。不过,我正在努力将其转换为LINQ语法,我想学习这两个选项,而不是某种嵌套循环


Collection1
中删除查询结果后的最终目标:
Collection1.Count==Collection2
,对于集合中的每个项目,以下情况都是正确的:
ItemFromCollection1.Name==SomeItemFromCollection2.Field
(如果有意义的话…

您的第一个查询与您要求的相反。它在寻找没有等价物的记录。以下内容将返回Collection1中存在等效项的所有记录:

 var results=Collection1.Where(c1=>!Collection2.Any(c2=>c2.Field==c1.Name));

请注意,这不是最快的方法,特别是如果collection2中有大量记录。您可以通过哈希集或查找找到加快查询速度的方法。

您的第一个查询与您要求的相反。它在寻找没有等价物的记录。以下内容将返回Collection1中存在等效项的所有记录:

 var results=Collection1.Where(c1=>!Collection2.Any(c2=>c2.Field==c1.Name));

请注意,这不是最快的方法,特别是如果collection2中有大量记录。您可以通过哈希集或查找找到加速的方法。

您可以将其转换为LINQ方法,如下所示:

var result = Collection1.Where(item => !Collection2.Any(x => x.ColumnName == item.FieldName))
                        .ToList();  

您可以将其转换为LINQ方法,如下所示:

var result = Collection1.Where(item => !Collection2.Any(x => x.ColumnName == item.FieldName))
                        .ToList();  

如果要获得要保留的非重复值列表,请执行以下操作

List<string> listNonDup = new List<String>{"6","1","2","4","6","5","1"};
var singles = listNonDup.GroupBy(n => n)
             .Where(g => g.Count() == 1)
             .Select(g => g.Key).ToList();

如果要获得要保留的非重复值列表,请执行以下操作

List<string> listNonDup = new List<String>{"6","1","2","4","6","5","1"};
var singles = listNonDup.GroupBy(n => n)
             .Where(g => g.Count() == 1)
             .Select(g => g.Key).ToList();

你说得对。我会努力清理我的帖子。我所做的是找到不匹配的,然后在以后的时间删除它们。这是我的错误沟通。您将要更改为…
c1=>!收藏2.任何
。。。以获得非重复性。我并不担心大量的唱片。平均应该在15英寸左右。肯定不会超过100个左右。编辑的答案反映了获得非重复而不是重复。你是对的。我会努力清理我的帖子。我所做的是找到不匹配的,然后在以后的时间删除它们。这是我的错误沟通。您将要更改为…
c1=>!收藏2.任何
。。。以获得非重复性。我并不担心大量的唱片。平均应该在15英寸左右。绝对不超过100个左右。编辑的答案反映了获得非重复而不是重复。真棒,工作完美。现在我只需要将它与另一个进行比较……太棒了,效果非常好。现在我只需要把它和另一个做比较。。。