DevForce 2012 使用选择器搜索最大结果的 Punch Cocktail 存储库查询

DevForce 2012 Punch Cocktail Repository Query with Selector to Search for Max Result

我正在尝试使用 Punch Framework 查询 Table 的最大值(长)。

这是原始的 LINQ 查询:

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

我打算将此 LINQ 查询转换为使用 Cocktail 存储库:

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

这适用于 select 组的第一个 LongValue,但我如何更改查询以提供 Table 的最大结果?

DevForce 本身使用 AsScalarAsync 方法来处理标量查询的异步执行。 Punch 不直接实现这一点,但您可以扩展您的存储库 class 来提供这一点。它看起来类似于基础 Repository<T> class 实现 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 为 Max 提供了多个重载,因此请查看文档以了解哪种最适合您。