2010-01-06 18 views
5

Estoy usando Linq a sql y Linq Dynamic OrdenBy.Linq a Sql - Dynamic OrderBy - Case Cuando

Sé que linq dynamic puede hacer una clasificación simple como - orderby ("column_name").

Pero ¿es compatible con algo más complejo como consultas con "CASE WHEN" en ellos?

string orderbyQuery = "(CASE WHEN (username == 100) THEN 1 ELSE 0 END) DESC)"; 

aquí es mi consulta:

var u = from u in db.users 
     orderby(orderbyQuery) 
     select u; 

el ejemplo anterior no funciona! , alguna idea si es posible? de otra manera de hacerlo?

gracias

Respuesta

10
var u = from u in db.users 
     orderby u.username == 100 ? 1 : 0 descending 
     select u; 
+0

tengo que usar la consulta dinámica porque, tengo un int [] realUsers = 100, 22, 77, 12, etc ... quiero ordenar la tabla de Usuarios basado en ese int [], lo que significa mostrar a los usuarios en "realUsers" primero. – dan

+1

Puede reemplazar ese u.nombre de usuario == 100? 1: 0 con (casi) cualquier lógica que desee para ordenar, básicamente está simplemente escribiéndola en C# en lugar de Sql. Sin saber exactamente cómo está tratando de ordenar, es difícil dar un mejor ejemplo que convertir su código original ... –

1

Esto realmente funciona para mí:

var queryResult = 
    from o in Source 
    orderby (o.ColumnThatSaysOrderByColumn1 ? o.Column1 : o.Column2) descending 
    select o 

Espero que esto ayude!

0

Parece que no puede usar CASE en una consulta LINQ dinámica. Sin embargo, se puede utilizar el iif-keyword:

var query = db.users.OrderByDescending("iif(username = '100', 1, 0)"); 

Overview de los métodos y las palabras clave de expresión LINQ dinámicos.