2010-12-16 12 views
6

¡PROBLEMA RESUELTO!Solicite LINQ por "cadena" nombre

La solución es Linq.Dynamic

Usted hacerlo de esta manera:

(from c in Context.AccountCharts 
    where c.Account_FK == account && c.Year_FK == year select c).OrderBy(order); 

Usted tiene que descargar el System.Linq.Dynamic.dll e incluirlo en su proyecto.


Hay una manera de ordenar una consulta de linq por el nombre de un campo. de esta manera:

from c in Context.AccountCharts 
    where c.Account_FK == account && c.Year_FK == year 
    orderby c["ColName"] select c; 

O

from c in Context.AccountCharts 
    where c.Account_FK == account && c.Year_FK == year 
    orderby c.GetType().GetField("ColName") select c; 

Ninguna de estas dos obras, pero espero que sabe de una manera de hacer esto.

+0

desea ordenar la totalidad tabla, basado en un campo que puede cambiar fila por fila? es decir, si ColName es "Account_FK" en la primera fila, y "Year" es la segunda fila, ¿con qué columna desea ordenarla? –

+0

¿Está intentando usar la reflexión dentro de una consulta LINQ? ¿Qué sucede si vas por 'orderby c.GetType(). GetField (" ColName "). GetValue (c)'? –

+0

@James, @Anon, creo que simplemente quiere que el 'orderby' sea variable en lugar de codificado. Entonces, en un caso, quiere ordenar ColumnA, otro ColumnB, y prefiere no escribir varias funciones que solo difieren en la línea 'orderby'. Si es así, su uso del término 'campo' es desafortunado, ya que eso implica una variable de miembro privado en lugar de una columna en una base de datos. –

Respuesta

1

me paso a muchos tiempo para resolver este problema, pero no encontró nada mejor que:

var queryExpression; 
if (c["ColName"]=="CreateDate") 
    queryExpression.OrderBy(x => x.CreateDate); 
+0

En realidad, creo que solo quiere ser 'if (ColName ==" CreateDate ")' –

0

la esperanza que esto funcionará también, aunque no se ha probado

Context.AccountCharts.Where(c=>c.Account_FK == account && c.Year_FK == year).OrderBy(o=>o.order); 
Cuestiones relacionadas