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()));
}
}
dXNpbmcgU3lzdGVtOwp1c2luZyBTeXN0ZW0uTGlucTsKdXNpbmcgU3lzdGVtLkNvbGxlY3Rpb25zLkdlbmVyaWM7CgpjbGFzcyBQcm9kdWN0IHsKICAgcHVibGljIGludCBJRDsKICAgcHVibGljIGludCBDYXRlZ29yeUlEOwp9CiAgICAgICAgCnB1YmxpYyBjbGFzcyBUZXN0CnsKCXB1YmxpYyBzdGF0aWMgdm9pZCBNYWluKCkKCXsKCSAgICB2YXIgcHJvZHVjdHMgPSBuZXcgTGlzdDxQcm9kdWN0PigpOwogICAgICAgICAgICBwcm9kdWN0cy5BZGQobmV3IFByb2R1Y3QoKSB7IElEID0gMSwgQ2F0ZWdvcnlJRCA9IDEgfSk7CiAgICAgICAgICAgIHByb2R1Y3RzLkFkZChuZXcgUHJvZHVjdCgpIHsgSUQgPSAyLCBDYXRlZ29yeUlEID0gMSB9KTsKICAgICAgICAgICAgcHJvZHVjdHMuQWRkKG5ldyBQcm9kdWN0KCkgeyBJRCA9IDMsIENhdGVnb3J5SUQgPSA3IH0pOwogICAgICAgICAgICBwcm9kdWN0cy5BZGQobmV3IFByb2R1Y3QoKSB7IElEID0gNCwgQ2F0ZWdvcnlJRCA9IDggfSk7CiAgICAgICAgICAgIHByb2R1Y3RzLkFkZChuZXcgUHJvZHVjdCgpIHsgSUQgPSA1LCBDYXRlZ29yeUlEID0gOSB9KTsKICAgICAgICAgICAgcHJvZHVjdHMuQWRkKG5ldyBQcm9kdWN0KCkgeyBJRCA9IDYsIENhdGVnb3J5SUQgPSAxMCB9KTsKCiAgICAgICAgICAgIHZhciBjYXRJRHMgPSBuZXdbXSB7MSwgOCwgOSB9OwogICAgICAgICAgICB2YXIgb3JkZXJlZCA9IHByb2R1Y3RzCiAgICAgICAgICAgICAgICAuT3JkZXJCeURlc2NlbmRpbmcocCA9PiBjYXRJRHMuQ29udGFpbnMocC5DYXRlZ29yeUlEKSkKICAgICAgICAgICAgICAgIC5UaGVuQnkocCA9PiBwLkNhdGVnb3J5SUQpOwogICAgICAgICAgICAgICAgCiAgICAgICAgICAgIENvbnNvbGUuV3JpdGUoCiAgICAgICAgICAgICAgICBzdHJpbmcuSm9pbihFbnZpcm9ubWVudC5OZXdMaW5lLCAKICAgICAgICAgICAgICAgIG9yZGVyZWQuU2VsZWN0KHAgPT4gCiAgICAgICAgICAgICAgICAgICAgU3RyaW5nLkZvcm1hdCgiSUQ9ezB9IENhdElEPXsxfSIscC5JRCxwLkNhdGVnb3J5SUQpKS5Ub0FycmF5KCkpKTsKCX0KfQ==