Ordenar una búsqueda por una lista dada.
¿Cómo puedo ordenar las claves de un ILookup como los valores de una lista dada en C#?
Encontré estos dos enlaces, pero no entiendo cómo hacerlo.
https://stackoverflow.com/questions/7942207/how-to-sort-a-lookup
https://stackoverflow.com/questions/15275269/sort-a-list-from-another-list-ids
static void Main()
{
// lista con IDs de categorías (el orden está dado por la lógica interna)
List<long> sortedList = new List<long> { 533, 321, 752, 251, 985 };
// crear el ILookup con CategoryId como clave para los productos
// el ILookup ya existe en el código original y es necesario antes y después de la reordenación
List<product> products = new List<product>();
products.Add(new Product { Id = 23, CategoryId = 752 });
products.Add(new Product { Id = 24, CategoryId = 752 });
products.Add(new Product { Id = 25, CategoryId = 533 });
products.Add(new Product { Id = 26, CategoryId = 321 });
products.Add(new Product { Id = 27, CategoryId = 321 });
ILookup<long, product=""> lookupUnsorted = products.ToLookup(prod => prod.CategoryId, prod => prod);
// ¿cómo puedo ordenar el ILookup para que las claves estén ordenadas como en sortedList?
// intenté algo como esto (lo cual da un error de conversión)
ILookup<long, product=""> lookupSortedBySortedList = lookupUnsorted
.OrderBy(p => sortedList.IndexOf(p.Key)).ToLookup(prod => prod.Key, prod => prod);
// también pensé en iterar sobre sortedList
// y agregar los elementos de lookupUnsorted a un nuevo Lookup, pero no es posible agregar elementos a un lookup
// ¿o con LINQ o con la ayuda de Join?
}
class Product
{
public long Id { get; set; }
public long CategoryId { get; set; }
}
Gracias.</long,></long,>
davy.ai
Para ordenar las claves de un ILookup como los valores de una lista dada en C#, puedes usar LINQ para ordenar el ILookup basándote en el índice de las claves en la lista dada. Aquí tienes un ejemplo de código que demuestra cómo hacer esto:
En este código, primero creamos un ILookup no ordenado usando el método ToLookup. Luego, usamos LINQ para ordenar el ILookup basándonos en la sortedList. Proyectamos cada clave en la lista a un nuevo objeto que contiene la clave y los valores correspondientes del ILookup no ordenado. Luego, convertimos los objetos proyectados en un nuevo objeto ILookup usando ToLookup.
Ten en cuenta que en este código, asumimos que cada clave en la sortedList existe en el ILookup no ordenado. Si este no es el caso, necesitarás agregar un manejo de errores para manejar las claves faltantes.</long,></long,>