这是我的第一篇文章,我希望我的问题的措词有道理,如果没有,请告诉我。
我正在努力编写一个linq查询,我正在评估的字段可以为空。
我有一个对象集合,它们有一个可以为空的枚举字段和一个id字段(filteredCollection)。我还在列表中有一组枚举(SearchCriterionQualificationUnitLevels)。
我想得到一个对象集合的子集,其中枚举字段与列表中的一个值匹配。
目前我有以下代码正在运行,但我有兴趣了解如何在不必跳过这么多箍的情况下获得相同的结果。
Dictionary<int, QualificationLevel> unitsWithLevels = filteredCollection.Where(x => x.QualificationLevel != null).ToDictionary(k => k.QualificationUnitID, v => v.QualificationLevel.Value);
var matchingUnits = from unitWithLevel in unitsWithLevels
join unitLevels in SearchCriterionQualificationUnitLevels on unitWithLevel.Value equals unitLevels
select unitWithLevel.Key;
filteredCollection = from unit in filteredCollection
join matchingUnit in matchingUnits on unit.QualificationUnitID equals matchingUnit
select unit;
提前致谢
答案 0 :(得分:2)
这可以通过单一陈述(为了便于阅读添加新行)来实现
Dictionary<int, QualificationLevel> unitsWithLevels =
filteredCollection
.Where(x => x.QualificationLevel != null
&& SearchCriterionQualificationUnitLevels.Any(unitLevel => unitLevel.Equals(x.QualificationLevel.Value)));
答案 1 :(得分:-1)
var subset=filteredCollection.Where(i=>SearchCriterionQualificationUnitLevels.Any(l=>l==i.QualificationLevel));