Linq ordenar por boolean
Tengo una consulta linq que quiero ordenar por f.bar, que es una cadena, pero también quiero ordenarla por f.foo, que es un campo booleano, primero. Como la consulta a continuación.
(from f in foo
orderby f.foo, f.bar
select f)
Aunque esto compila no funciona como se esperaba. Solo ordena por f. bar ignorando el campo booleano.
Estoy siendo tonto, lo sé, pero ¿qué necesito hacer para obtener este comportamiento?
Gracias
3 answers
Eso debería funcionar bien - debería ordenar primero las entidades con un valor false
foo, luego aquellas con un valor true
foo.
Eso ciertamente funciona en LINQ to Objects - ¿qué proveedor de LINQ está utilizando realmente?
Aquí hay un ejemplo de LINQ to Objects que funciona :
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);
}
}
}
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2011-03-23 16:22:22
Solo quería hacer esto y parece algo sin orden implícito. Hice lo siguiente para ser más explícito:
Something.OrderBy(e=>e.SomeFlag ? 0 : 1)
Para ordenar algo verdadero a falso.
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2013-05-23 16:45:48
Para ser más explícito sobre el orden que se está utilizando.
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;
}
}
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2018-09-03 11:31:05