using System;
using System.Linq;
using System.Collections.Generic;
class Product {
public int ID;
public int CategoryID;
}
public class Test
{
public static void Main()
{
var products = new List<Product>();
products.Add(new Product() { ID = 1, CategoryID = 1 });
products.Add(new Product() { ID = 2, CategoryID = 1 });
products.Add(new Product() { ID = 3, CategoryID = 7 });
products.Add(new Product() { ID = 4, CategoryID = 8 });
products.Add(new Product() { ID = 5, CategoryID = 9 });
products.Add(new Product() { ID = 6, CategoryID = 10 });
var catIDs = new[] { 1, 8, 9 };
var ordered = products
.OrderByDescending(p => catIDs.Contains(p.CategoryID))
.ThenBy(p => p.CategoryID);
Console.Write(
string.Join(Environment.NewLine,
ordered.Select(p =>
String.Format("ID={0} CatID={1}",p.ID,p.CategoryID)).ToArray()));
}
}
dXNpbmcgU3lzdGVtOwp1c2luZyBTeXN0ZW0uTGlucTsKdXNpbmcgU3lzdGVtLkNvbGxlY3Rpb25zLkdlbmVyaWM7CgpjbGFzcyBQcm9kdWN0IHsKICAgcHVibGljIGludCBJRDsKICAgcHVibGljIGludCBDYXRlZ29yeUlEOwp9CiAgICAgICAgCnB1YmxpYyBjbGFzcyBUZXN0CnsKCXB1YmxpYyBzdGF0aWMgdm9pZCBNYWluKCkKCXsKCSAgICB2YXIgcHJvZHVjdHMgPSBuZXcgTGlzdDxQcm9kdWN0PigpOwogICAgICAgICAgICBwcm9kdWN0cy5BZGQobmV3IFByb2R1Y3QoKSB7IElEID0gMSwgQ2F0ZWdvcnlJRCA9IDEgfSk7CiAgICAgICAgICAgIHByb2R1Y3RzLkFkZChuZXcgUHJvZHVjdCgpIHsgSUQgPSAyLCBDYXRlZ29yeUlEID0gMSB9KTsKICAgICAgICAgICAgcHJvZHVjdHMuQWRkKG5ldyBQcm9kdWN0KCkgeyBJRCA9IDMsIENhdGVnb3J5SUQgPSA3IH0pOwogICAgICAgICAgICBwcm9kdWN0cy5BZGQobmV3IFByb2R1Y3QoKSB7IElEID0gNCwgQ2F0ZWdvcnlJRCA9IDggfSk7CiAgICAgICAgICAgIHByb2R1Y3RzLkFkZChuZXcgUHJvZHVjdCgpIHsgSUQgPSA1LCBDYXRlZ29yeUlEID0gOSB9KTsKICAgICAgICAgICAgcHJvZHVjdHMuQWRkKG5ldyBQcm9kdWN0KCkgeyBJRCA9IDYsIENhdGVnb3J5SUQgPSAxMCB9KTsKCiAgICAgICAgICAgIHZhciBjYXRJRHMgPSBuZXdbXSB7IDEsIDgsIDkgfTsKICAgICAgICAgICAgdmFyIG9yZGVyZWQgPSBwcm9kdWN0cwogICAgICAgICAgICAgICAgLk9yZGVyQnlEZXNjZW5kaW5nKHAgPT4gY2F0SURzLkNvbnRhaW5zKHAuQ2F0ZWdvcnlJRCkpCiAgICAgICAgICAgICAgICAuVGhlbkJ5KHAgPT4gcC5DYXRlZ29yeUlEKTsKICAgICAgICAgICAgICAgIAogICAgICAgICAgICBDb25zb2xlLldyaXRlKAogICAgICAgICAgICAgICAgc3RyaW5nLkpvaW4oRW52aXJvbm1lbnQuTmV3TGluZSwgCiAgICAgICAgICAgICAgICBvcmRlcmVkLlNlbGVjdChwID0+IAogICAgICAgICAgICAgICAgICAgIFN0cmluZy5Gb3JtYXQoIklEPXswfSBDYXRJRD17MX0iLHAuSUQscC5DYXRlZ29yeUlEKSkuVG9BcnJheSgpKSk7Cgl9Cn0=