我正在尝试用一些参数查询表中的最大值(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重载,所以请查看文档,看看哪一个最适合你。