Вот как бы я это сделал.
var ordered = list.OrderBy(i => i.Type == 0 ? "" : i.Text);
Предполагается, что нет пустых текстовых строк, где i == 0. Если вы не можете сделать это предположение, сработает следующее:
var ordered = list.OrderBy(i => i.Type).ThenBy(i => i.Type == 0 ? "" : i.Text);
Задав одинаковые значения всем элементам с типом 0, вы оставите их все в их первоначальном порядке, а другие элементы будут отсортированы по текстовому значению.
На заметке, это запах кода:
public int Type; //this can be only 0 or 1
На первый взгляд это звучит так, как будто это должен быть логический или пользовательский тип enum
. После более глубокого взгляда на то, что вы пытаетесь сделать, кажется, что вы, возможно, не ожидаете, что Text
будет даже допустимым значением, если Type равен 0. Если это так, вам следует рассмотреть возможность использования наследования классов для фактического отличить один тип предмета от другого.