IList – LINQ para filtrar y ordenar por

Tengo el siguiente código de prueba para búsqueda de una lista genérica:

public void DoSearch(string searchTerm)
{

IList<MyEntity> entities = GetCollectionOfEntities();

IList<MyEntity> results = entities.Where(d => d.Description.Contains(searchTerm)).ToList();

}

Quiero pasar un fin de por parámetro (que sería una propiedad de MyEntity) y, por supuesto, el fin de mis resultados en base a eso. Entiendo LINQ utiliza OrderBy pero no entiendo cómo a la orden por una propiedad de MyEntity.

InformationsquelleAutor youwhut | 2010-01-11

2 Kommentare

  1. 10

    Usted sólo tiene que utilizar un Func<TSource,TKey> para especificar la propiedad que desea ordenar por:

    DoSearch("foo", e => e.SomeProperty);
    
    //...
    
    public void DoSearch<TKey>(string searchTerm, Func<MyEntity, TKey> orderBy)
    {
        IList<MyEntity> entities = GetCollectionOfEntities();
    
        IList<MyEntity> results = entities
                                  .Where(e => e.Description.Contains(searchTerm))
                                  .OrderBy(orderBy)
                                  .ToList();
    
        //etc
    }
    • Bueno este es un buen comienzo pero, ¿cómo voy a ir yo acerca de pasar esto como un parámetro para que mi firma de método sería public void DoSearch(cadena searchTerm, orderby)…?
    • No en absoluto, o el uso de la Reflexión (que es lento y que probablemente no sea útil en general). La Func<> el camino es realmente la mejor manera de ir de aquí de la omi. +1
    • Excelente. Saludos para la ayuda.
    • Tendría que pasar el Func<S,K> en el método en sí. He actualizado la respuesta a demostrar.
    • ¿cuál es la razón para utilizar TKey?
  2. 0
        public void DoSearch(string searchTerm, Func<MyEntity, PropertyType> selector)
        {
    
           IList<MyEntity> entities = GetCollectionOfEntities();
    
           IList<MyEntity> results = entities
                          .Where(d => d.Description.Contains(searchTerm))
                          .OrderBy(selector)
                          .ToList();
    
       }
    
       DoSearch("searchTerm", entity => entity.Property)

    PropertyType es el tipo de propiedad que desea ordenar. Otra cosa que usted podría hacer es Genérico como este:

        public void DoSearch<TKey>(string searchTerm, Func<MyEntity, Tkey> selector)

    Y llamo.

Kommentieren Sie den Artikel

Bitte geben Sie Ihren Kommentar ein!
Bitte geben Sie hier Ihren Namen ein

Pruebas en línea