C# 获取包含项目的结果列表!=现有项目

C# 获取包含项目的结果列表!=现有项目,c#,linq,list,C#,Linq,List,我正在开发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

我正在开发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;
}
此列表将填充包含所有现有chordkey的下拉列表:

现在,我想制作另一个列表,其中包含数据库中尚不存在的按排序顺序排列的所有ChordKeys和弦


为了做到这一点,我可以写什么结果声明?

您可以使用Except子句

var exceptedList = sortingOrder.Except(results).ToList();
从排序顺序开始,只保留结果中尚未包含的项目

    var notInDb = sortingOrder.Where(item => !results.Contains(item));
可以在sortingOrder上使用lambda Where语句仅返回结果中未包含的值:


编辑:这将留给后人,但更容易阅读。

为了做到这一点,我可以写什么样的结果声明是什么意思?sortingOrder是否包含您的所有键?是的,我需要一个结果查询,该查询包含sortingOrder中列出的所有键减去我正在查询的数据库中已存在的键。并且结果也是字符串类型?结果是字符串列表是
var newChords = sortingOrder.Where(c => return !results.Contains(c));