2012-01-26 11 views
1

これは私の最初の投稿です。質問のフレーズが意味をなさないことを願っています。linqを使用してnull可能なフィールドを照会する

私が評価しているフィールドがnull可能であるところで、linqクエリを書くのは苦労しています。

私はnullable enumフィールドとidフィールド(filteredCollection)を持つオブジェクトのコレクションを持っています。また、リストに列挙型のコレクションがあります(SearchCriterionQualificationUnitLevels)。

列挙型フィールドがリスト内の値の1つと一致するオブジェクトコレクションのサブセットを取得したいとします。

私は以下のコードを実行していますが、私は非常に多くのフープを飛び越えることなく同じ結果を達成する方法を見つけることに興味があります。私は専用のコレクションを取得するために辞書を使用してそれは実際に簡単です事前

答えて

2

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; 

おかげでこれは焦がす文で達成することができます(新しい行は読みやすくするために追加された)

Dictionary<int, QualificationLevel> unitsWithLevels = 
filteredCollection 
.Where(x => x.QualificationLevel != null 
&& SearchCriterionQualificationUnitLevels.Any(unitLevel => unitLevel.Equals(x.QualificationLevel.Value))); 
+1

QualificationLevelを持つユニットの数。 SearchCriterionQualificationUnitLevels.Any(unitLevel => unitLevel.Equals(x.QualificationLevel.Value))); – plm

+0

@plmはい、良いキャッチです: 'filteredCollection = ) – archil

-1
var subset=filteredCollection.Where(i=>SearchCriterionQualificationUnitLevels.Any(l=>l==i.QualificationLevel)); 
関連する問題