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

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.

Responder a