Порядок LINQ и логическое


У меня есть запрос linq, который я хочу заказать по f.bar, который является строкой, но я также хочу заказать его по f.foo, который является логическим полем. Как и запрос ниже.

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

хотя это компилирует он не работает, как ожидалось. Он просто заказывает f. bar, игнорируя логическое поле.

Я веду себя глупо, я знаю, но что мне нужно сделать, чтобы получить такое поведение?

спасибо

3 90

3 ответа:

Это должно работать нормально - он должен заказать объекты с false foo значение во-первых, то те, с true значение foo.

Это, безусловно, работает в LINQ to Objects - какой поставщик LINQ вы на самом деле используете?

вот пример LINQ to Objects который тут работы:

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);
        }
    }

}

просто хотел сделать это, и это похоже на что-то без неявного упорядочения. Я сделал следующее, чтобы быть более ясным:

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

то True на false.

чтобы быть более явным об используемом порядке.

Something.OrderBy(e => e.SomeFlage, new BooleanComparer());

public class BooleanComparer : IComparer<bool>
{
    public int Compare(bool x, bool y)
    {
        int p = x ? 1 : 0;
        int q = y ? 1 : 0;
        return p - q; 
    }
}