动态构建LINQ(Dynamic String based Queries in LINQ - Dynamic Expression API)

System.linq.Dynamic 相对于使用语言运算符或类型安全的lambda扩展方法来构建你的LINQ查询,动态查询库为您提供可以传递任何字符串表达式为基于字符串的扩展方法。 立即下载

The Dynamic Expression API extends the core LINQ API with the ability to dynamically create string based queries that are constructed at run-time. The API provides


  • Dynamic parsing of strings to produce expression trees (the ParseLambda and Parse methods),
  • Dynamic creation of “Data Classes” (the CreateClass methods), and
  • Dynamic string-based querying through LINQ providers (the IQueryable extension methods).


The post uses a LINQ to SQL entity model for the NorthWind database in VS 2008, We create an instance of this model like so:


NorthwindDataContext context = new NorthwindDataContext();


I normally would write a query to return all customers ordered by the ContactName in descending order like so:


var x = context
    .Customers
    .OrderByDescending(c => c.ContactName);


If instead, I wanted to define the Sort column and Sort direction in a string, I could rewrite the query, with the help of the Dynamic Expression API, like so:


string sortExpression = "ContactName DESC"; 
var x1 = context 
    .Customers
    .OrderBy(sortExpression);


The SQL generated in both cases will be


SELECT [t0].[CustomerID], [t0].[CompanyName], [t0].[ContactName], [t0].[ContactTitle],
[t0].[Address], [t0].[City], [t0].[Region], [t0].[PostalCode], [t0].[Country], [t0].[Phone], [t0].[Fax]
FROM [dbo].[Customers] AS [t0] 4: ORDER BY [t0].[ContactName] DESC


Moving on to another example, If I had a query like so,


DateTime myDate = Convert.ToDateTime("7/26/1996");
var y = context
    .Orders
    .Where(a => (a.Customer.Country == "Switzerland") && (a.OrderDate < myDate))
    .OrderBy(o=> o.OrderDate)
    .Select(o => new { o.Customer.ContactName, o.Customer.Country, o.OrderDate });


I could use the Dynamic Expression API to rewrite it like this:


var y1 = context
    .Orders
    .Where("Customer.Country == @0 and OrderDate < @1", "Switzerland", myDate)
    .OrderBy("OrderDate")
    .Select("new(Customer.ContactName,Customer.Country, OrderDate)");


Note that, in the query above, the shape of the result is specified as a string. Note also that I have defined what are known as substitution values in the Where statement.

The SQL generated in both cases would be:


exec sp_executesql N'SELECT [t1].[ContactName], [t1].[Country], [t0].[OrderDate] 
FROM [dbo].[Orders] AS [t0]
LEFT OUTER JOIN [dbo].[Customers] AS [t1] ON [t1].[CustomerID] = [t0].[CustomerID]
WHERE ([t1].[Country] = @p0) AND ([t0].[OrderDate] < @p1)
ORDER BY [t0].[OrderDate]' 6: N'@p0 nvarchar(11),@p1 datetime'
@p0=N'Switzerland',
@p1='1996-07-26 00:00:00:000'


To use the Dynamic Expression API, add the Dynamic.cs class to your project and import the System.Linq.Dynamic namespace.  


To learn more, download the LINQ and language samples for Visual Studio 2008 Beta 2 zip file located at the Visual Studio 2008 samples page.

Reference:
http://weblogs.asp.net/rajbk/archive/2007/09/18/dynamic-string-based-queries-in-linq.aspx

【学习笔记-QGIS】 QGIS从零快速上手 安装文章参考:https://zhuanlan.zhihu.com/p/370633306。 阅读详情

相关推荐

EGE基础入门篇(一):绘图基础知识

EGE绘图所需要了解的相关基础知识

依稀_yixy的博客 2万+

could not be translated. Either rewrite the query in a form that can be translated

今天在编写Linq的时候,突然抛出这样一个异常:could not be translated. Either rewrite the query in a form that can be translated,之前就出现过,一直没怎么整明白,简单修复后就没再管,可是今天还相同的错误还是又重现了,大致的意思就是:Linq无法被翻译成成sql执行,恼人啊!其实解决也很简单,先看错误的写法: 解决方案:对调一下位置,即可解决! 口诀: from 数量少的 join 数量多的 on ...

qq_42799562的博客 8083

微信小程序消息推送全攻略:从模板消息到订阅消息的实战避坑指南

本文深入解析微信小程序消息推送机制,对比模板消息、订阅消息与客服消息的核心差异与适用场景。重点提供订阅消息从用户授权设计、前端代码实现到后端稳定发送的完整实战指南,并分享提升消息点击率的文案与运营技巧,帮助开发者构建高效、用户友好的消息推送体系。

b3n4m5q6w7的博客 338

推荐一个强大的动态 LINQ 库:System.Linq.Dynamic.Core

本文将向您介绍一个非常实用的开源项目——,这是一个允许您在运行时构建和执行 LINQ 查询的库。对于那些经常处理复杂数据查询或需要动态生成查询条件的开发者来说,这绝对是一个值得收藏的工具。 ## 项目简介 System.Linq.Dynamic.Core 提供了 C# 和 VB.NET 的动态 LINQ 查询支持。它基于 .NET Core 和 .NET Standard,这意味着它可以无缝集...

gitblog_00044的博客 1241

PFC中pb模型实战:从胶结参数设置到破坏模拟全流程解析

本文详细解析了PFC软件中平行胶结模型(PB模型)的实战应用全流程。从胶结参数(pb_kn, pb_ks, pb_ten等)的物理意义与精准赋值入手,深入探讨了模型构建、胶结施加以避免初始损伤的技巧,并系统介绍了破坏过程的监测、阈值判定方法以及高级可视化与常见问题诊断。旨在帮助岩土工程与颗粒材料研究者掌握从参数调试到破坏模拟的核心操作,提升数值模拟的准确性与效率。

php55的博客 1075

ReAct 智能体 Agent:架构解析与实践拓展

ReAct 智能体 Agent 凭借其推理与行动协同的独特架构,在众多人工智能应用场景中展现出巨大的潜力。从智能办公到教育辅导,从智能家居到工业物联网,ReAct 智能体通过精准推理和高效行动,为用户提供了更加智能、便捷的服务体验。然而,在实际应用过程中,仍面临工具调用安全、模型持续学习、多智能体协作管理以及性能优化等多方面的挑战。通过合理的策略和技术创新,如强化工具审核机制、构建持续学习框架、设计高效协作协议和采用性能优化手段,我们有望逐步克服这些挑战,进一步提升 ReAct 智能体的性能和可靠性。

加入“Super Entity”,与全能开发团队共探AI智能体与数字人项目,开启前沿技术之旅。 1688

聊聊 System.Linq.Dynamic,以及分享一个使用 System.Linq.Dynamic 扩展 LINQ 查询的详细例子

System.Linq.Dynamic 扩展了 .NET 中的 LINQ 查询功能,通过它,我们可以在运行时动态构造 LINQ 查询表达式,就像是写原生 SQL 语句一样,更加灵活直观。

yangshuquan的专栏 1164

不提交也不释放的事务,数据库连接还有可能被复用

摘要 实验发现Spring事务管理下,未提交事务的数据库连接池连接仍可被复用,这与传统认知相悖。通过配置HikariCP连接池(最大2连接)并设计测试接口,观察到未提交事务的连接会被后续请求复用。这可能导致GTID错误(当MySQL开启GTID且混用事务/非事务表时)以及数据修改丢失问题。研究揭示了Spring事务管理机制与连接池交互的特殊行为,对高并发系统设计具有重要启示。

蔡定努 179

C#中利用Linq.Dynamic实现简单的动态表达式构建查询

背景介绍 在ADO.NET中我们可以根据用户输入的查询条件拼接出指定的SQL语句进行查询或者筛选出所需的数据,但是在ORM框架如EF中,我们一般用LINQ操作数据查询,LINQ是否可以像SQL一样拼接查询条件呢?答案是可以的。这一技术叫Linq.Dynamic(动态Linq),Linq.Dynamic的出现解决了本人心中的疑惑,不然总感觉少了什么。不管怎么样,我们首先要做的是去网上找各种大神的资...

机械键盘侠博客 7560

揭秘大厂智能生产调度AI系统架构:架构师拆解中台化设计3大优势

智能生产调度AI系统是基于AI算法(如遗传算法、强化学习、深度学习),结合生产数据(如订单、设备、库存、人员),自动生成最优生产计划与调度方案的系统。最大化设备利用率(减少停机时间);最小化生产周期(快速交付订单);优化库存水平(降低积压与短缺);提升准时交货率(满足客户需求)。维度传统调度系统智能调度AI系统决策逻辑规则引擎+人工经验AI算法(预测+优化)数据处理手工汇总+静态数据实时数据整合+动态更新适应能力固定场景(如单一产品、单一工厂)

AI Python 编程之道的博客 759

解锁RK3588+RTL8211F:千兆以太网PHY调优秘籍

本文探讨了RK3588芯片搭配RTL8211F千兆以太网PHY的优化方案。文章首先分析了RK3588和RTL8211F的硬件特性,指出时序问题可能源于时钟信号不稳定、传输延迟和PHY内部逻辑延迟。针对这些问题,提出了选用高质量时钟源、优化PCB布线等时序优化策略,以及合理配置硬件参数、优化网络协议等延迟优化方法。在配置实践部分,详细介绍了硬件连接规范和软件配置步骤,并建议使用Iperf、Ping等工具进行性能测试。最后总结了常见问题解决方案,展望了未来PHY芯片和传输技术的发展趋势。这些优化措施可显著提升网

远程部署调试 运行安装 项目调试 二次开发 项目技术新 持续迭代 部分源码免费分享 288

System.Linq.Dynamic的使用

项目中经常用到组合条件查询,根据用户配置的查询条件进行搜索,拼接SQL容易造成SQL注入,普通的LINQ可以用表达式树来完成,但也比较麻烦。有个System.Linq.Dynamic用起来比较方便。 NuGet: Install-Package System.Linq.Dynamic 大致的用法是这样的: //NULL类型判断 var query = dbContext.sys_user.Where("userid!=null").OrderBy("id desc"); //整形的查询 var que

极客神殿 1871

Python遥感图像处理应用篇(二十三):Python+GDAL 批量拼接图像

遥感影像拼接分多种不同的情况,比如比较常用的是两幅影像拼接或者多个图像合并为一个图像。GDAL中实现影像拼接的方式也有多种,比如常用可以通过numpy读取影像数组,并计算各个图像的numpy数组范围,合并多个numpy数组为一个最终的结果,并将其重新输出为一幅新的图像,即可实现图像的拼接。另外比较方便的一种方法便是使用GDAL.warp()函数方法。这个函数的功能很多,可以实现多种不同的目的,比如用于坐标系转换、投影变换、图像合并与镶嵌、地理范围裁剪、更改分辨率、矢量裁剪等多种功能。这些功能可以通过设置Op

soderayer的博客 4643

DynamicLinq学习小结

DynamicLinq是一个很好的对Linq拓展的方式,个人认为极其适用于Web中间层的布置,但是数据库字段往往无法准确对应到C#语言中,因此在Guid型字段怎么DynamicLinq着实卡了不少时间。其实最终解决办法相当简单,就当这是个脑筋急转弯吧。 var setC = client.ReadBasStdMaterBomDetailsFiltered(null, "VersionID.ToS

yoiyo_0的专栏 475

锂电池充电器电路设计 里面有电路

锂电池充电器电路设计 里面有电路 3.7V升压到5V电路设计。

数学建模模型总结

这是本人在两年内准备参加数学建模竞赛搜集到的模型资料,已经经过了本人的筛选和整理,希望能够对准备参加数学建模竞赛的学弟学妹们提供一些帮助!

EFCore 中 DateTimeOffset 报错 System.InvalidOperationException

System.InvalidOperationException: The LINQ expression 'DbSet().Where(t => t.CreatedTime >= 2022/10/3 10:20:30)' could not be translated. Either rewrite the query in a form that can be translated, or switch to client evaluation explicitly by inserting a cal

未将对象引用设置到对象的实例 1182

老版QQ原生表情gif动态

这是老版的QQ表情,不过全是动态的的,Windows照片查看器是不会动的,可以右击用浏览器打开查看,再说一遍是老版的,只是分享给宁愿用老版也要动态的人。

System.Linq.Dynamic 动态查询

安装VS-&gt;工具栏-&gt;NuGet程序管理器,System.Linq.Dynamic 注意:使用动态查询必须先调用AsQueryable()方法,因为动态扩展仅适用于实现IQueryable的集合。然后迭代结果与常规Linq一样。动态查询using System.Linq.Dynamic /// &lt;summary&gt; /// 得到明细过滤条件 /...

flyingdream123的专栏 8181

Probability and Statistics - 4th edition

Probability and Statistics - 4th edition

Dynamic Expression API动态将字符串解析成Linq表达式

http://www.lcs.syr.edu/faculty/fawcett/handouts/CoreTechnologies/CSharp/samples/CSharpSamples/LinqSamples/DynamicQuery/Dynamic%20Expressions.html#_Substitution_Values   https://nuget.org/packages/Dy...

weixin_34220179的博客 509

Dynamic Expressions and Queries in LINQ

[索引页]这篇是在LinqSamples中关于Dynamic LINQ的文档.今天看后就把它翻译过拉.不知道有没有官方的中文版,但我都翻译拉所以就发上来拉..如果你没有去ms下,你可以点这里 请指正. 数据库应用程序常常依靠动态SQL查询,在运行时通过程序逻辑创建查询,这里的LINQ底层架构支持相似于通过使用在System.Linq.Expressions namespace中的类来动...

weixin_33757609的博客 325

The LINQ expression '****' could not be translated and will be evaluated locally.

The LINQ expression 'Contains([x].ExamId)' could not be translated and will be evaluated locally. 今天看日志的时候,看到一条这样的警告,翻译过来是Linq 表达式无法翻译成sql,将在本地计算,就是因为这个Contains方法,没办法解析成sql语句,将会跳过这个条件,将数据拉到内存,然后再执行这个...

maaici的博客 5479

用dynamic expression运行时访问dynamic object

实验了好久才弄出来,msdn上怎么就不给下示例。。。 var eo = new System.Dynamic.ExpandoObject(); dynamic o = eo; o.hello = "world"; var oDynamic = Expression.Lambda&lt;Fun...

weixin_34356555的博客 225

System.Linq.Dynamic动态查询

System.Linq.Dynamic动态查询动态查询动态分组 动态查询 记录一下,方便下次使用: /// <summary> /// 拼接动态查询条件 /// </summary> /// <param name="userId"></param> /// <param nam...

csdmwinter的博客 1912

Telerik Grid Server Side Paging, Sorting and Filtering

Reference: http://ryantomlinson.com/post/True-data-paging-the-Telerik-RadGrid.aspx http://demos.telerik.com/aspnet-ajax/grid/examples/programming/custompaging/defaultcs.aspx Dynamic LINQ:http://w

riverlau的专栏 2267

又学一招——linq 之 select 动态

添加命名空间  :using System.Linq.Dynamic; var dalResult = BoServiceProvider.GetBOBaseInfo(requestParams.BOTs, requestParams.Page, requestParams.Size); var blResult = dalResult.Select(AutoM

世界中心的专栏 3936
上一篇: 如何避免在EF自动生成的model中的DataAnnotation被覆盖掉
下一篇: Select top from datatable
mx5721
博客等级 码龄17年 24粉丝 104原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值