C # LINQ Orderby - Como true / false afeta orderby?

Eu estava estudando um pouco de pedidos do LINQ, pois tenho uma lista de IDs e preciso solicitá-los sequencialmente. No entanto, existem certos IDs que precisam ter precedência sobre o pedido padrão.

Dado esse código C # (que pode ser colado no.NET Fiddle para testar), a encomenda funciona como eu preciso, mas não entendo por que não (!) operador em um contém está me dando a ordem correta?

Minha saída de pedidos esperada é (5, 1, 2, 3, 4, 6, 7, 8, 9)

Se eu tiver umContains no meu pedido, ele não deveria dar prioridade ao pedido para as linhas que retornaram verdadeiras? Em vez disso, parece dar prioridade ao pedido para as linhas que retornam false.

using System.Linq;
using System;

public class Program
{
  public static void Main()
  {
    var numbersToFilterBy = new [] {5, 11, 20};

    var x = new [] {new XClass(){Id = 1}, new XClass(){Id = 9}, new XClass(){Id = 5}, new XClass(){Id = 3}, new XClass(){Id = 4}, new XClass(){Id = 2}, new XClass(){Id = 6}, new XClass(){Id = 8}, new XClass(){Id = 7}};

    var trueData = (from data in x
                   orderby !numbersToFilterBy.Contains(data.Id), data.Id
                    select data).ToList();

    foreach(var item in trueData){
        Console.WriteLine(item.Id);
  }
}

public class XClass{
    public int Id{get;set;}
  }
}

Qual é a explicação de por que isso acontece?

questionAnswers(4)

yourAnswerToTheQuestion