DevForce 2012 Punch Cocktail Repository Query with Selector



我正在尝试用一些参数查询表中的最大值(long),并尝试使用Punch Framework。

以下是LINQ查询的原始版本:

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

我打算将这个LINQ查询转换为使用Cocktail Repository:

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

这最终可以选择组的第一个LongValue,但我如何更改查询以获得表的最大结果?

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有几个Max重载,所以请查看文档,看看哪一个最适合你。

最新更新