表达式跨服务器执行技术研究情况
要在业务层编写一个 Linq查询(或者说表达式树)对象,然后序列化,以HTTP Get的方式发送到 WebAPI 的服务器上执行,因此需要将 Linq 对象进行序列化和反序列化,昨天的实验结果是如果直接对Linq 对象进行序列化,反序列化会遇到问题,因此今天尝试其它的数据传输方式,方案有2种:
1,以特定的查询DTO 方式传输查询请求 这涉及到2个步骤:
1.1,将 Linq 对象序列化到DTO对象的问题,这个必须定制,解析Linq表达式,构造DTO对象;
1.2,将DTO对象在解析成Linq 对象。
这2个步骤都没有现成的解决方案,难度很大。
2,以业界开放的数据查询协议 OData 方式传输查询请求
OData是业界新兴起的一个标准,在Asp.Net WebAPI和 WCF DataService中均可以提供支持,该方案也分为2个步骤:
2.1,将Linq对象序列化成OData请求的URL;
2.2,将OData URL请求提交至 WebAPI OData;
经过试验,在 ASP.NET MVC5 WebAPI OData 提供了支持,2.2 可以实现,但是2.1步骤难以实现,和其他朋友交流后得知,有一个linqtoquerystring 的项目可能提供支持(http://linqtoquerystring.net/): Linq to Querystring is an expression parser for .NET that aims to provide a lightweight subset of the OData URI Specification. We focus only on the query aspect of the specification which is one of the most useful and flexible elements of OData.
下载了该项目源码进行研究,目前还没有研究明白具体如何使用,以及它支持的OData版本(目前最新的是OData V4)
有关OData的应用文章:
http://www.it165.net/pro/html/201306/6106.html 让Web API支持OData查询
http://www.tuicool.com/articles/BjMF32 ASP.NET WebApi 开放数据
-------------------------------------
总结: 目前这种跨服务器的Linq查询有一定难度,建议根据应用需求使用常规的方法来解决,在WebAPI服务器上提供方法进行定制查询,或者在整个查询层,使用其它数据框架.
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· 阿里巴巴 QwQ-32B真的超越了 DeepSeek R-1吗?
· 【译】Visual Studio 中新的强大生产力特性
· 10年+ .NET Coder 心语 ── 封装的思维:从隐藏、稳定开始理解其本质意义
· 【设计模式】告别冗长if-else语句:使用策略模式优化代码结构
2011-05-30 PostgreSQL的PDF.NET驱动程序构建过程