gpt4 book ai didi

entity-framework-core - 如何使用 Hotchocolate 和 EF Core 指定默认排序?

转载 作者:行者123 更新时间:2023-12-05 04:34:44 24 4
gpt4 key购买 nike

有没有办法添加默认排序字段,以便我可以 UsePagingUserSorting,但是如果没有指定顺序,我会添加一个字段,例如 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
}

如果没有排序,那么 Entity Framework 会显示警告:

The query uses a row limiting operator ('Skip'/'Take') without an 'OrderBy' operator.
This may lead to unpredictable results

而且我看到了一些意想不到的结果

最佳答案

归功于 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();
}

然后可以这样调用:

[UseContext]
[UsePaging]
[UseProjection]
[UseFiltering]
[UseSorting]
public IQueryable<Property> GetProperties([ScopedService] PropContext dbContext)
{
return dbContext.Properties
.OrderByArgumentOrDefault(context, () => properties.OrderBy(p => p.Id));
}

关于entity-framework-core - 如何使用 Hotchocolate 和 EF Core 指定默认排序?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/71161140/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com