背景:我有两个具有不同名称属性(两个字符串)的不同类型对象的集合。Collection1中的对象有一个名为Name的字段,Collection2中的对象有一个名为Field的字段。
我需要比较这两个属性,并根据该字符串属性从Collection1获取Collection2中没有匹配项(Collection1总是有更多或相同数量的项)。当完成时,所有项目都应该按名称/字段在Collection2中有一个匹配项)。
问题:我已经通过列表找到了答案,它们帮助了我一点(不管它的价值如何,我使用的是集合)。我确实找到了似乎适合我的this answer,但是我想从查询语法中转换我所做的事情(如果它是这样的话?)到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 (如果这有意义的话.)
发布于 2016-01-13 21:36:54
可以将其转换为如下所示的LINQ方法:
var result = Collection1.Where(item => !Collection2.Any(x => x.ColumnName == item.FieldName))
                        .ToList();  发布于 2016-01-13 21:36:32
您的第一个查询与您要求的正好相反。它在寻找没有类似记录的记录。以下内容将返回Collection1中的所有记录,如果存在等效的记录:
 var results=Collection1.Where(c1=>!Collection2.Any(c2=>c2.Field==c1.Name));请注意,这不是最快的方法,特别是如果collection2中有大量记录。您可以通过HashSets或查找找到加快速度的方法。
发布于 2016-01-13 21:45:36
如果您希望获得要保留的非重复值的列表,请执行以下操作。
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();产量: 2,4,5
如果您想要一个包含所有重复值的列表,则可以执行相反的操作。
var duplicatesxx = listNonDup.GroupBy(s => s)
    .SelectMany(g => g.Skip(1)).ToList();https://stackoverflow.com/questions/34777450
复制相似问题