2016-01-12 2 views
2

Я пытаюсь запросить таблицу для максимального значения (long) с некоторыми параметрами, пытаясь использовать Punch Framework.DevForce 2012 Punch Cocktail Repository Query with Selector для поиска максимального результата

Вот оригинал запросов LINQ:

Table.Where(x=>x.GroupId == 1).Max(x=>x.LongValue) 

Я Привязав преобразовать этот LINQ запрос, чтобы использовать Коктейль Repository:

(await UnitOfWork.GetRepository<Table>() 
      .FindAsync(selector => selector.Select(x => x.LongValue), predicate => predicate.GroupId.Equals(1),)) 
      .FirstOrDefault(); 

Это работает финт, чтобы выбрать первый LongValue Группы , но как я могу изменить запрос, чтобы дать мне результат Max из таблицы?

ответ

2

DevForce надлежащим образом использует метод AsScalarAsync для обработки асинхронных выполнения скалярных запросов. Punch не реализует это напрямую, но вы можете расширить свой класс репозитория, чтобы обеспечить это. Он будет похож на то, как класс Repository<T> реализует CountAsync. Что-то вроде этого:

public Task<long> MaxAsync(Expression<Func<T, bool>> predicate, 
     Expression<Func<T, long>> projection) 
{ 
    return this.GetFindQuery(predicate, null, null).AsScalarAsync().Max(projection); 
} 

DevForce имеет несколько перегруженных для Макса, поэтому необходимо проверить документы, чтобы увидеть, что работает лучше для вас.

Смежные вопросы