IList - LINQ для фильтрации и упорядочения по - PullRequest
1 голос
/ 11 января 2010

У меня есть следующий тестовый код для поиска в общем списке:

public void DoSearch(string searchTerm)
{

IList<MyEntity> entities = GetCollectionOfEntities();

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

}

Я хочу передать заказ по параметру (который будет свойством MyEntity) и, конечно, упорядочить мои результаты на основе этого. Я понимаю, что LINQ использует OrderBy, но не понимаю, как оформить заказ по свойству MyEntity.

Ответы [ 2 ]

10 голосов
/ 11 января 2010

Вы просто используете Func<TSource,TKey>, чтобы указать недвижимость, которую хотите заказать:

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
}
0 голосов
/ 11 января 2010
    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 - это тип свойства, которое вы хотите отсортировать. В противном случае вы можете сделать это Generic следующим образом:

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

И назовите это.

...