Я изучал порядок упорядочения LINQ, поскольку у меня есть список идентификаторов, и мне нужно упорядочивать их последовательно. Однако существуют определенные идентификаторы, которые должны иметь приоритет над стандартным порядком.
Учитывая этот код С# (который можно вставить в .NET Fiddle для тестирования), упорядочение работает так, как мне нужно, но я не понимаю, почему оператор not (!
) В контейнере дает мне правильный порядок?
Мой ожидаемый результат заказа (5, 1, 2, 3, 4, 6, 7, 8, 9
).
Если в моем упорядочении есть Contains
, не должен ли он отдавать приоритет упорядочению для строк, которые вернули true? Вместо этого он, по-видимому, дает приоритет упорядочивания строкам, которые возвращают 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;}
}
}
Как объяснить, почему это происходит?