我将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>() };}如何在仍然允许Breeze负责执行和返回inlineCount的同时将查询选项手动应用于Queryable?我在上面所做的问题有三个方面: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/
10-12 16:25