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 提供了多个重载,因此请查看文档以了解哪种最适合您。
我正在尝试使用 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 提供了多个重载,因此请查看文档以了解哪种最适合您。