使用linq查询可为null的字段

本文关键字:null 字段 linq 查询 使用 | 更新日期: 2023-09-27 18:21:25

这是我的第一篇文章,我希望我的问题措辞有意义,如果没有,请告诉我。

我正在努力编写一个linq查询,其中我正在评估的字段可以为null。

我有一个对象集合,它有一个可为null的枚举字段和一个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;

提前感谢

使用linq查询可为null的字段

这可以在单个语句中实现(为可读性添加新行)

Dictionary<int, QualificationLevel> unitsWithLevels = 
filteredCollection
.Where(x => x.QualificationLevel != null 
&& SearchCriterionQualificationUnitLevels.Any(unitLevel => unitLevel.Equals(x.QualificationLevel.Value)));
var subset=filteredCollection.Where(i=>SearchCriterionQualificationUnitLevels.Any(l=>l==i.QualificationLevel));