125 votes

Linq ordre par booléen

J'ai une requête linq que je veux commander par f.bar, qui est une chaîne, mais je veux aussi la commander par f.foo, qui est d'abord un champ booléen. Comme la requête ci-dessous.

 (from f in foo
orderby f.foo, f.bar
select f)
 

Bien que cela compile, cela ne fonctionne pas comme prévu. Il ordonne simplement à f.bar d'ignorer le champ booléen.

Je suis stupide, je sais, mais que dois-je faire pour avoir ce comportement?

Merci

203voto

Jon Skeet Points 692016

Cela devrait fonctionner correctement - il convient de classer les entités avec une valeur false foo en premier, puis celles ayant une valeur true foo.

Cela fonctionne certainement dans LINQ to Objects - quel fournisseur LINQ utilisez-vous réellement?

Voici un exemple LINQ aux objets qui fonctionne:

 using System;
using System.Linq;

public static class Test
{
    public static void Main()
    {
        var data = new[]
        {
            new { x = false, y = "hello" },
            new { x = true, y = "abc" },
            new { x = false, y = "def" },
            new { x = true, y = "world" }
        };

        var query = from d in data
                    orderby d.x, d.y
                    select d;

        foreach (var result in query)
        {
            Console.WriteLine(result);
        }
    }

}
 

138voto

Jonny Leeds Points 741

Je voulais juste faire cela et cela ressemble à quelque chose sans ordre implicite. J'ai fait ce qui suit pour être plus explicite:

 Something.OrderBy(e=>e.SomeFlag ? 0 : 1) 
 

trier quelque chose de vrai à faux.

-2voto

Raja Points 2349

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X