Pregunta

Aquí está mi configuración.

public class ItemList : List<Item>
{
  public void Load() {...}
  public void Save() {...}
}

Cargar lecturas de un archivo XML para completar la Lista de elementos

A continuación, intento ordenar la lista de elementos por Prioridad. Este es un int? Para los propósitos de la prueba, sin embargo, todos los artículos tienen un valor diferente.

ItemList itemList = new ItemList();
itemList.Load();

ItemList newItemList = itemList
                        .OrderBy(item => item.Priority) as ItemList;

return newItemList;

En el newItemList anterior siempre es nulo. itemList tiene un conteo de 7. He comprobado tres veces y todos los elementos en la instancia de itemList tienen un conjunto de prioridades.

¿Qué estoy haciendo mal?

También he intentado ...

ItemList newItemList = itemList
                        .OrderBy(item => item.Priority)
                        .ToList() as ItemList;

Nada parece estar funcionando.

Gracias de antemano!

¿Fue útil?

Solución

Ni OrderBy ni ToList devuelven una lista de elementos, por lo que el casting devuelve nulo, como señaló Joseph.

Como está heredando de la clase List < T > , puede usar el método de clasificación para clasificarlo:

ItemList itemList = new ItemList();
itemList.Load();
itemList.Sort((x, y) => x.Priority.CompareTo(y.Priority));
return itemList;

Otros consejos

El problema es que OrderBy no devuelve una Lista de artículos, devuelve un IOrderedEnumerable, y ToList () no devuelve una Lista de artículos, devuelve una lista. De cualquier manera, estás intentando convertir ambos en una Lista de elementos, que no lo son, por lo que obtienes un valor nulo.

ItemList someList = (new ItemList {new Item(2), new Item(1), new Item(3)});

//this returns an IOrderedEnumerable<Item>
var result = someList.OrderBy(i => i.Priority); 

//this returns a List<Item>
var otherResult = someList.ToList(); 

Creo que tu problema es el " como lista de elementos " ;.

Los operadores LINQ no funcionan en su lugar en su objeto newItemList. Crean y devuelven nuevos objetos. Si desea realizar una clasificación en el lugar, debe utilizar el método Sort () de List < > ;.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top