我有2个集合,一个可用功能和一个用户功能。我想删除包含其他集合中的功能代码的可用功能中的项目,但找不到正确的语法。
我已经包含了我当前无法编译的代码(它抱怨我不能使用“==”运算符,我的Linq知识很少)
Linq是最好的方法吗?任何帮助将不胜感激。
AvailableFeatureViewListClass availableFeatures = (AvailableFeatureViewListClass)uxAvailableList.ItemsSource;
UserFeatureListClass userFeatures = (UserFeatureListClass)uxUserFeatureList.ItemsSource;
foreach (UserFeatureClass feature in userFeatures)
{
availableFeatures.Remove(availableFeatures.First(FeatureCode => FeatureCode == feature.FeatureCode));
}
答案 0 :(得分:5)
对您的类型使用Except
方法和自定义Equals
或IEqualityComparer
实现(收集项目的类型不是很明显):
var features = availableFeatures.Except(userFeatures, new FeatureCodeComparer());
如果availableFeatures
只是一个整数集合,那么你只需执行以下操作:
var features = availableFeatures.Except(userFeatures.Select(x => x.FeatureCode));
答案 1 :(得分:2)
尝试这样的事情:
var features = (from af in availableFeatures select af.FeatureCode)
.Intersect(from uf in userFeatures select uf.FeatureCode);
答案 2 :(得分:1)
这个怎么样?
IEnumerable<int> a = new List<int>() { 1, 2 };
IEnumerable<int> b = new List<int> { 2, 3 };
var result = a.Except(b);
a = result;