2016-09-01 4 views
3

=既存の項目の結果どこ項目のリストを取得し、私は次のリストがあります。このリストは、とドロップダウンリストに移入されます私はasp.netアプリケーションを開発しています

public static List<SelectedSongKey_List> SelectedSongKeys(int songId) 
{ 
    var db = new BMDWorshipEntities(); 
    var results = (from x in db.Keys 
        where x.SongId == songId 
        select x.ChordKey).ToList(); 

    var sortingOrder = new List<string>() 
    { 
     "Ab", "A", "Bb", "B", "C", "C#", "Db", "D", "Eb", "E", "F", "F#", "Gb", "G" 
    }; 

    results = results.OrderBy(x => sortingOrder.IndexOf(x)).ToList(); 

    var skList = new List<SelectedSongKey_List>(); 
    foreach(var sk in results) 
    { 
     skList.Add(new SelectedSongKey_List() 
     { 
      SongKey = sk.Trim() 
     }); 
    } 

    return skList; 
} 

をすべての既存のChordKeys

ここでは、まだデータベースに存在しないすべてのChordKeys(和音はsortingOrderにあります)を含む別のリストを作成します。

これを行うには、私は何の文を書くことができますか?

+0

*あなたは何を意味していますか*そのためにはどのような結果文を書くことができますか? 'sortingOrder'にはあなたのすべてのキーが含まれていますか? –

+0

はい、私はすべてのキー(sortingOrderにリストされています)から、クエリしているデータベースにすでに存在するキーを除いた結果クエリが必要です。 –

+0

また、 'results'も' string'型ですか? –

答えて

7

あなたはsortingOrderとexcept節

var exceptedList = sortingOrder.Except(results).ToList(); 
0

スタートを使用して、結果にはまだないアイテムのみを維持することができます。

var notInDb = sortingOrder.Where(item => !results.Contains(item)); 
0

あなたはresultsに含まれていないだけで、これらの値を返すためにsortingOrderにラムダWhereステートメントを使用することができます

var newChords = sortingOrder.Where(c => return !results.Contains(c)); 

EDIT:後世のためにここにこれを残すが、Richa Garg's answerは読みやすいでしょう。

関連する問題