gpt4 book ai didi

c# - 使用 Breeze 手动应用 OData 查询选项并仍然返回 InlineCount

转载 作者:行者123 更新时间:2023-11-30 17:52:03 27 4
gpt4 key购买 nike

我将 Breeze 与 Web API 后端一起使用,我正在尝试弄清楚如何正确应用接收到的 OData 查询选项,同时还尝试为给定的 OData 查询返回 inlineCount。

我尝试这样做的原因是因为我需要访问另一个数据源并填写我要返回的实体的一些相关属性(同时仍然允许分页和排序)。

这是我正在尝试做的一个例子:

[HttpGet]
public QueryResult Reservations( ODataQueryOptions options ) {
var set = _contextProvider.Context.Reservations.Where(r => r is ScheduledReservation || r is PoolReservation).Include(i => i.ReservationType)
.Include(i => i.Vehicle)
.Include(i => i.Vehicle.VehicleMake)
.Include(i => i.Vehicle.VehicleModel).AsQueryable();

var queryable = Breeze.WebApi.QueryHelper.ApplyQuery(set, options, new ODataQuerySettings { EnableConstantParameterization = true, EnsureStableOrdering = true, HandleNullPropagation = HandleNullPropagationOption.Default });

// Hit other data source here and fill in associated properties on returned entities

return new QueryResult
{
InlineCount = // Would like to get at breeze's execution of this query,
Results = queryable.Cast<Reservation>()
};
}

我如何手动将查询选项应用于我的 Queryable,同时仍然允许 Breeze 负责执行和返回 inlineCount?

我上面所做的问题有三个方面:

1) 这是抛出一个错误,指出 Breeze 无法创建 EDM 模型,因为此操作方法返回一个 QueryResult 而不是实现 IEnumerable<> 的东西。

2) 我正在使用 Breeze 的 ApplyQuery() 方法而不是 ODataQueryOptions 对象的 ApplyTo() 方法,因为我还想对 ApplyTo() 尚不允许的嵌套属性进行排序。我不确定通过深入研究 Breeze 的功能并手动调用 ApplyQuery() 方法是否越界了。

3) 我可以在 EF Profiler 中看到,在调用 Breeze 的 ApplyQuery 方法时正在执行检索 inlineCount 的查询。我发现 ApplyQuery 方法将 ODataQueryOptions 对象上的 inlineCount 设置为键为 MS_InlineCount 的属性。因此,似乎没有一种“简单”的方法可以做到这一点(相反,将它从 ODataQueryOptions 属性数组中拉出来对我来说似乎很愚蠢)。

我要问的首要原因是整个思路感觉很尴尬。我想仔细检查并确保我没有遗漏任何东西,这些东西可以让我轻松地将 OData 查询应用于我的 DbSet,并且仍然允许返回 inlineCount(并且仍然允许正确的分页和排序)。

最佳答案

我最终偶然发现了这个问题的解决方案。以下帖子引导我找到正确的解决方案来解决我上面描述的问题。

Breeze WebAPI: How to combine QueryResult with ODataQueryOptions to return inlineCount

关于c# - 使用 Breeze 手动应用 OData 查询选项并仍然返回 InlineCount,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18705932/

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