2011-06-23 9 views
8

La consulta de Linq "ordenar por" no funciona y he seguido todas las sugerencias encontradas en su sitio y en otros sitios. Cualquier ayuda sería apreciada.Orden Linq Al no funcionar

[WebGet] 
    public IQueryable<vw_providercharge_providers> GetChargeProviders(int submitted) 
    { 
     var results = (from p in this.CurrentDataSource.vw_providercharge_providers 
         where p.submitted == submitted 
         orderby p.fullname 
         select p); 
     return results; 
    } 

Gracias por su ayuda!

Sí, este es un método WebGet para un servicio de datos WCF. Me sale un error de 400 si no devuelvo un tipo de IQueryable, así que modifiqué un poco tu sugerencia. Desafortunadamente, todavía parece ignorar cualquier orden por parte.

[WebGet] 
public IQueryable<vw_providercharge_providers> GetChargeProviders(int submitted) 
{ 
    var results = (from p in this.CurrentDataSource.vw_providercharge_providers 
        where p.submitted == submitted 
        orderby p.fullname 
        select p).ToArray(); 
    results.OrderBy(p => p.patientname); 
    return results; 
} 
+3

¿Qué quiere decir "no funciona?" ¿Qué esperas que haga, y qué está haciendo? – jason

+0

Por favor explique a qué se refiere con "no trabajar". – devuxer

+0

¿Qué hay de inesperado acerca de los resultados que está obteniendo? Pruebe .OrderBy (p => p.fullname); – esastincy

Respuesta

19

noto que regrese un IQueryable<T> - estás llamando cualquiera de los métodos de LINQ en el resultado antes de enumerar ella?

Not all LINQ methods preserve order. Más comúnmente, llamando al Distinct()después de usted hace que el pedido destruirá la orden.

+2

Gracias por el comentario sobre Distinct() que está causando el problema para mí. La solución se encuentra aquí [enlace] (http://stackoverflow.com/questions/12428985/distinct-and-orderby-issue) – mack

1

Como su método está marcado con un atributo WebGet, supongo que está llamando a este método desde un punto final web, por lo tanto, es posible que deba contraer la colección antes de enviarla a través de Internet.

Probar:

[WebGet] 
public vw_providercharge_providers[] GetChargeProviders(int submitted) 
{ 
    var results = (from p in this.CurrentDataSource.vw_providercharge_providers 
        where p.submitted == submitted 
        orderby p.fullname 
        select p).ToArray(); 
    return results; 
} 

De esta manera se tiene la garantía de que el método GetChargeProviders devoluciones y matriz en lugar de una expresión LINQ.

Saludos,

1

he encontrado la causa del problema.

No había establecido la columna "nombre completo" como una clave de entidad para la entidad del modelo de datos "vw_providercharge_providers". Solo la columna de identidad se configuró como clave de entidad. No me di cuenta de que era un requisito para usarlo en una cláusula order by.

Gracias de nuevo por su contribución.

+3

Esto no es correcto. No es necesario definir una columna como una clave de entidad dentro del modelo de datos para el método OrderBy. Sospecho que te encuentras con un comportamiento extraño debido a la forma en que tu vista está configurada en tu modelo de datos (o más bien de la manera incorrecta). Sospecho que al haber agregado la columna "nombre completo" como la Clave de la entidad ahora está forzando a sus resultados a ordenar por esta columna, independientemente de si usted utiliza específicamente orderby en su consulta de linq. Ordeno por varias columnas que no son claves dentro de vistas en mi contexto de datos (Entity Framework) y las ordena muy bien. – Jagd

Cuestiones relacionadas