Всегда есть «черный ход» с дозвуком. Он называется InlineQuery (SubSonic 2.2) или CodingHorror (SubSonic 3): http://subsonicproject.com/docs/CodingHorror
Ваш SQL-запрос, вероятно, будет выглядеть так:
SELECT top 3
newid() as sortorder, id
FROM some_table
ORDER by sortorder
Так что я бы предложил что-то вроде этого
List<int> result = new CodingHorror(@"
SELECT TOP 3
id, newid() as sortorder
FROM some_table
ORDER by sortorder
).ExecuteTypedList<int>();
Если он не изменился с дозвукового уровня 2.2 на 3, метод ExcecuteTypedList () возвращает первый элемент запроса, когда используется значение типа значения как параметр универсального типа. В этом случае: id.
Это тоже может сработать:
List<Product> result = new CodingHorror(@"
SELECT TOP 3
*, newid() as sortorder
FROM products
ORDER by sortorder
).ExecuteTypedList<Product>();