使用linq查询可空字段

时间:2012-01-26 14:31:57

标签: c# linq

这是我的第一篇文章,我希望我的问题的措词有道理,如果没有,请告诉我。

我正在努力编写一个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;

提前致谢

2 个答案:

答案 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));