score:74

The OrderBy method will sort items in ascending order by default. Now, given that the numeric representation of a boolean is:

• `false` = 0
• `true` = 1

`false` values will naturally come first. If you want to reverse the order just use the `descending` keyword:

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

score:5

Let me explain this with an example of a `List<bool>`. Consider the following snippet:

``````List<bool> BoolList = new List<bool>() { true, false, false, true };
var opList = BoolList.OrderBy(x => x).ToList();
``````

finally the `opList` will have the values as `false`,`false`,`true`,`true` which means false come first when we apply OrderBy over a list of boolean values. This is because false is consider as `0` and true will be `1`.

In your case the list is first sorted as `5,1,9,3,4,2,6,8,7` based on the `orderby !numbersToFilterBy.Contains(data.Id)` then by `data.Id` will gives you the exact result as `5, 1, 2, 3, 4, 6, 7, 8, 9`.

If you remove the `!` from the `OrderBy` it gives you the first sort result like `1,9,3,4,2,6,8,7,5` since the condition is true for `5` hence it will come last in the ordering.

score:7

Ordering isn't about priority – it's about ordinal value. You're doing an ascending order against a boolean value, and `false` has a lower ordinal value than `true` in that context.

score:31

Basically, `false` is earlier than `true`... think of them as false=0, true=1. This is in-keeping with the documentation for `bool.CompareTo(bool)`.

If you want to prioritize "true" values to the start, just use `OrderByDescending` instead.