Pregunta

Supongamos que tenemos una entidad que tiene atributos Att1 y ATT2, donde ATT1 puede tener valores de a, b, c y ATT2 puede tener valores 1,2,3. Es posible el uso de LINQ para que podamos ordenar los elementos de la colección mediante la aplicación de la regla de clasificación arbitraria sin implementar IComparable. Estoy frente a un problema eran los negocios exige que en algunas pantallas de elementos de la colección pueden clasificar de una manera y en otras pantallas de alguna otra manera. Por ejemplo regla puede indicar que los artículos deben ser ordenados de manera que "b" aparece en primer lugar, a continuación, "a", a continuación, "c" y dentro de cada grupo, "3" es primero, a continuación, "1" y luego "2".

¿Fue útil?

Solución

Claro. Puede utilizar OrderBy con un predicado que devuelve más o menos cualquier tipo de "orden" arbitraria por favor. Por ejemplo:

objectsWithAttributes.OrderBy(x =>
{
    // implement your "rules" here -- anything goes as long as you return
    // something that implements IComparable in the end.  this code will sort
    // the enumerable in the order 'a', 'c', 'b'

    if (x.Attribute== 'a')
        return 0;
    else if (x.Attribute== 'c')
        return 1;
    else if (x.Attribute== 'b')
        return 2;
}).ThenBy(x =>
{
    // implement another rule here?
});
Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top