我正在开发一个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
中)的列表,但这些列表中还没有。
为了做到这一点,我可以写什么results
声明?
答案 0 :(得分:8)
您可以使用“除外条款”
var exceptedList = sortingOrder.Except(results).ToList();
答案 1 :(得分:0)
从sortingOrder
开始,只保留尚未包含在结果中的项目。
var notInDb = sortingOrder.Where(item => !results.Contains(item));
答案 2 :(得分:0)
您可以在Where
上使用lambda sortingOrder
语句仅返回results
中未包含的值:
var newChords = sortingOrder.Where(c => return !results.Contains(c));
编辑:将此留给后人,但Richa Garg's answer更容易阅读。