odata expand

学odata的时候,用expand。发现网上的例子要么太古老,要么expand用不了。安装Microsoft.AspNetCore.Odata的最新版本库,又不知道怎么用。微软官网搜索都是asp.net framework的案例。


实在没辙了,看看源码吧。怎么用有说明,很简单。


自己写了一个Demo,总是报ArgumentException: Object of type 'System.Linq.EnumerableQuery`1[Microsoft.AspNetCore.OData.Query.Wrapper.SelectAllAndExpand`1[***]]' cannot be converted to type 'System.Linq.IQueryable`1[***]'.

尝试了很多办法,都没解决。

下载了源码,有sample,我用其中ODataRoutingSample项目跑起来可以用expand。看代码跟自己的Demo没看出区别。有参考就好说了,一点一点对比呗。自己创建的是 asp.net core api项目,目标框架net core 3.1 。


最后发现是control和action不能同时加 [EnableQuery] 特性。


报错中的SelectAllAndExpand是啥呢,通过看源码他继承自SelectExpandWrapper。

 意思大概就是因为odata表达式不同,action返回的model不同。就比如现在加了expand,返回结果和不用expand的不同。用SelectExpandWrapper包装一下。

自己猜测control和action都加[EnableQuery]特性,导致包装了两层。原本System.Linq.EnumerableQuery[***]就行,现在变成了System.Linq.EnumerableQuery[Microsoft.AspNetCore.OData.Query.Wrapper.SelectAllAndExpand[***]]。

有大佬知道具体的原因,希望不吝赐教。

另外提一嘴,你的control都不必须继承自Microsoft.AspNetCore.OData.Routing.Controllers.ODataController。继承自Microsoft.AspNetCore.Mvc.ControllerBase也可以用odata。

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值