pero para eso usas criteria o hql, q estan basados en strings, y
listo... o sea... si tenes una base de datos es probable que tengas
muuuchos resultados. No queres ordenar todo en memoria y usando
reflection, asi que lo vas a tener que pasar a criteria.
Hay otra forma, usando System.Linq.Expression, pero es bastante
complicada. seria algo como (tendria que checkear los tipos, estoy
inventando un poco pero la idea se entiende):
var p = Expression.Parameter("p");
var sortExpression = (Expression<Func<T,
IComparable>>)Expression.Lambda( Expression.Property( propertyName,
p), p );
dataSource.OrderBy( sortExpression );podes, incluso, tener un cache de estas expresiones por tipo- propertyName asi no tenes que andar creando esto una y otra vez. On 12 abr, 05:32, Juan Cuello <[email protected]> wrote: > Yo hacía referencia a la posibilidad de ordenar una lista > especificando el nombre de la propiedad del objeto e indicar el tipo > de ordenación. Ciertamente es LINQ to Objects, pero consigues la > finalidad indicada. > > Un saludo > > On 7 abr, 13:42, ivowiblo <[email protected]> wrote: > > > Buenas > > El codigo que pasaste que trabaja con LINQ, en realidad, trabaja con > > Linq-to-objects. No va a resolverlo en la consulta sql. La idea de un > > provider de Linq o una API de consultas, es que todo se compile a un t- > > sql y no que se ejecute en memoria. > > Para 2.1.2, hay un proyecto llamado NHibernate.LambdaExtensions que > > provee métodos de extensión a criteria para poder usar lambra > > expressions como restrictions. El > > link:http://code.google.com/p/nhlambdaextensions/ > > > salut > > > On 30 mar, 13:32, Juan Cuello <[email protected]> wrote: > > > > Eso también se puede hacer por LINQ, pero te lo tienes que trabajar. > > > > Puedes crear un método extensor de un objeto que te devuelva el valor > > > de una propiedad por reflection especificando el nombre de la > > > propiedad en string, y lo usas en la expresión LINQ :) > > > > Yo lo hice para la ordenación de un grid (o grilla). El grid me decía > > > la columna seleccionada para ordenar y si era ascendente o descendente > > > (que tampoco te lo da el linq) y puede hacer cosas como: > > > > IEnumerable<T> data = dataSource.OrderByProperty(propertyName, > > > direction == SortDirection.Ascending); > > > > El OrderByProperty: > > > > public static IOrderedEnumerable<TKey> > > > OrderByProperty<TKey>(this IEnumerable<TKey> lista, string > > > propertyName, bool ascending) > > > { > > > ObjectComparer<object> __comparer = new > > > ObjectComparer<object>(ascending); > > > return lista.OrderBy(c => > > > c.GetPropertyValue<object>(propertyName), __comparer); > > > } > > > > El GetPropertyValue: > > > > public static TValue GetPropertyValue<TValue>(this object > > > element, string propertyName) > > > { > > > PropertyInfo property = > > > element.GetType().GetProperty(propertyName); > > > if (property == null) throw new > > > NotSupportedException("Property " + propertyName + " ins't a public > > > property"); > > > > return (TValue)property.GetValue(element, null); > > > } > > > > Y un comparador: > > > > private class ObjectComparer<TKey> : IComparer<TKey> > > > { > > > Comparer<TKey> compa = Comparer<TKey>.Default; > > > > private bool __isAscending; > > > > public ObjectComparer() > > > { > > > __isAscending = true; > > > } > > > > public ObjectComparer(bool isAscending) > > > { > > > __isAscending = isAscending; > > > } > > > > #region Miembros de IComparer<TKey> > > > > public int Compare(TKey x, TKey y) > > > { > > > int result = compa.Compare(x, y); > > > if (__isAscending) return result; > > > else return result * -1; > > > } > > > > #endregion > > > } > > > > On 30 mar, 17:04, Diego Mijelshon <[email protected]> wrote: > > > > > Hay una alternativa a compilarlo, que es bajar los binaries > > > > dehttp://hornget.net/packages/orm/nhibernate/nhibernate-trunk > > > > <http://hornget.net/packages/orm/nhibernate/nhibernate-trunk>El > > > > resultado es > > > > el mismo; yo prefiero tener *checkouteado* el repo para ir viendo los > > > > updates, pero hornget puede ser más cómodo para tener todo a mano > > > > facilmente. > > > > > En cuando al QueryOver... es un poco más cómodo a veces, pero la base > > > > es la > > > > misma; si te gusta que sea strongly-typed, es para vos. > > > > > De todos modos, tené en cuenta que el caso de uso principal de Criteria > > > > (vs > > > > HQL o LINQ) es para búsquedas... y ahí muchas veces es más cómodo tener > > > > algo > > > > NO strongly typed, donde puedas pasar como string el nombre de un campo > > > > por > > > > el cual filtrar u ordenar. > > > > > Diego > > > > > 2010/3/30 Juan Cuello <[email protected]> > > > > > > Eso! El QueryOver! > > > > > > No importa demasiado que no sea un proveedor de linq por mi parte, > > > > > pero lo convierte en algo mucho más intuitivo, y eso que ya no era > > > > > difícil... Puede que HQL sea muy potente, pero poder utilizar strongly > > > > > typed lo considero importantísimo. > > > > > > La curiosidad me ha venido porque he descargado ConfORM para aprender > > > > > y he visto que utiliza NH 3.0, y más curiosidad aún... es un no > > > > > acabar :) > > > > > > Muchísimas gracias José > > > > > > On 30 mar, 16:22, José F. Romaniello <[email protected]> wrote: > > > > > > NHibernate 3 tiene un nuevo provider de linq. (Recordar que > > > > > > NHibernate 2 > > > > > ya > > > > > > tenia un provider de linq basado en criteria, esta disponible en > > > > > nhcontrib y > > > > > > es usado por mucha gente.) > > > > > > > En NHibernate 3 el provider esta dentro de nhibernate. Este nuevo > > > > > provider > > > > > > ya soporta más escenarios que el viejo, sobre cuan estable es NH3, > > > > > > creo > > > > > que > > > > > > es mejor sacar conclusiones por uno mismo. > > > > > > > Por otro lado, nh3 incluye también una api strongly typed para > > > > > > criteria > > > > > > llamada QueryOver, que bajo ningún punto de vista es un provider de > > > > > > linq. > > > > > > > Donde bajar NH3? creo que la única opción es descargar y compilar el > > > > > trunk. > > > > > > > Por último, para estar más al día con las novedades: > > > > >http://nhforge.org/blogs/nhibernate/ > > > > > > > El 30 de marzo de 2010 11:09, Juan Cuello <[email protected]> > > > > > escribió: > > > > > > > > Hola, > > > > > > > > ¿Alguien sabe decirme el estado de NHibernate 3? Está release? En > > > > > > > la > > > > > > > web veo que la ultima es la 2.1.2... > > > > > > > > Por otro lado, me ha parecido ver algo que me daba la sensación > > > > > > > que NH > > > > > > > 3 tenía integración con LINQ o almenos se parecía mucho... > > > > > > > > Gracias > > > > > > > > -- > > > > > > > Para escribir al Grupo, hágalo a esta dirección: > > > > > > > [email protected] > > > > > > > Para más, visite:http://groups.google.com/group/NHibernate-Hispano > > > > > > > > To unsubscribe from this group, send email to nhibernate-hispano+ > > > > > > > unsubscribegooglegroups.com or reply to this email with the words > > > > > "REMOVE > > > > > > > ME" as the subject. > > > > > > -- > > > > > Para escribir al Grupo, hágalo a esta dirección: > > > > > [email protected] > > > > > Para más, visite:http://groups.google.com/group/NHibernate-Hispano > > > > > > To unsubscribe from this group, send email to nhibernate-hispano+ > > > > > unsubscribegooglegroups.com or reply to this email with the words > > > > > "REMOVE > > > > > ME" as the subject. -- Para escribir al Grupo, hágalo a esta dirección: [email protected] Para más, visite: http://groups.google.com/group/NHibernate-Hispano
