Pet*_*err 3 entity-framework-core hotchocolate
有没有办法添加默认排序字段,以便我可以UsePaging和UserSorting,但如果没有指定顺序,我会添加一个字段,例如 Id。但如果用户确实指定了顺序,则不要添加默认值。
例如,我可以将默认排序添加到查询方法中,但其他排序不起作用
[UseContext]
[UsePaging]
[UseProjection]
[UseFiltering]
[UseSorting]
public IQueryable<Property> GetProperties([ScopedService] PropContext dbContext)
{
return dbContext.Properties
.OrderBy(p => p.Id); // Default sort by Prop Id
}
Run Code Online (Sandbox Code Playgroud)
如果没有排序,实体框架会显示警告:
该查询使用行限制运算符(“Skip”/“Take”),而不使用“OrderBy”运算符。
这可能会导致不可预测的结果
我看到了一些意想不到的结果
感谢 S Blomstrand
使用这些扩展方法
public static bool HasOrderByArgument(this IResolverContext context,
string argumentName = "order")
{
try
{
var orderByArgument = context.ArgumentLiteral<IValueNode>(argumentName);
if (orderByArgument != NullValueNode.Default && orderByArgument != null)
{
return true;
}
}
catch
{
return false;
}
return false;
}
public static IQueryable<T> OrderByArgumentOrDefault<T>(this IQueryable<T> query, IResolverContext context,
Func<IQueryable<T>> func, string argumentName = "order")
{
if (context.HasOrderByArgument(argumentName))
{
return query;
}
return func.Invoke();
}
Run Code Online (Sandbox Code Playgroud)
然后可以按如下方式调用它:
[UseContext]
[UsePaging]
[UseProjection]
[UseFiltering]
[UseSorting]
public IQueryable<Property> GetProperties([ScopedService] PropContext dbContext)
{
return dbContext.Properties
.OrderByArgumentOrDefault(context, () => properties.OrderBy(p => p.Id));
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
1128 次 |
| 最近记录: |