选择不是另一个对象的属性的String

时间:2014-11-03 21:48:18

标签: c# linq

我正在编写的代码将从数组 ApiIds 中选择不是结果对象的属性ApiId的字符串键。

我写了下面的代码,但它对我来说看起来多余,有没有办法将它组合成一个语句而不是将对象的HashSet转换为另一个字符串的HashSet?

        var resultsCached = new HashSet<string>(results.Select(x => x.ApiId));
        var missingResults = apiIds.Select(x => !resultsCached.Contains(x));

感谢。

2 个答案:

答案 0 :(得分:8)

Except会为您提供不在其他系列中的项目:

var missingResults = apiIds.Except(results.Select(x => x.ApiId));

答案 1 :(得分:1)

另一种有效的O(n)方法是使用HashSet.ExceptWith删除集合中第二个序列中的所有元素:

HashSet<string> apiIdSet = new HashSet<string>(apiIds);
apiIdSet.ExceptWith(results.Select(x => x.ApiId));  

该集仅包含现在不在results的字符串。