LINQ to SQL 调用 SQL Server 的系统函数
Ø 简介
在 C# 中比较常用的 ORM(Object Relational Mapping)框架就是 EF 了,EF 经常结合 LINQ to SQL 来操作数据库。本文主要讨论如何在 LINQ to SQL 语法中调用 SQL Server 的内置函数,或者系统函数。主要使用以下静态类实现:
1. DbFunctions 类
1) 位于 EntityFramework.dll(EF6.0) 程序集的 System.Data.Entity 命名空间中,适用于EF6.0 的版本。
2) 另外,在 EntityFramework.dll(EF6.0) 程序集的 System.Data.Entity.Core.Objects 命名空间中,还有另外一个类 EntityFunctions,但已过时,所以建议使用 DbFunctions 类。非要使用也是可以的,适用于EF6.0 的版本。
2. SqlFunctions 类
1) 位于 EntityFramework.SqlServer.dll(EF6.0) 程序集的 System.Data.Entity.SqlServer 命名空间中,适用于 EF6.0的版本。
2) 同样,在 System.Data.Entity.dll(.NET v4.5) 程序集的 System.Data.Objects.SqlClient 命名空间中, 也有一个相同的类 EntityFunctions,适用于EF4.0 和 EF5.0 的版本。
3. SqlMethods 类,该类位于 System.Data.Linq.dll(.NET v4.5) 程序集的 System.Data.Linq.SqlClient 命名空间中。
Ø 注意事项:
1. 如果在调用以上静态方法时,抛出 System.NotSupportedException 异常,例如:LINQ to Entities 不识别方法“System.Nullable`1[System.Int32] CharIndex(System.String, System.String, System.Nullable`1[System.Int32])”,因此该方法无法转换为存储表达式。则表示该类和方法不适用当前的 EF 版本。
1. DbFunctions 类的使用实例
1) 比较两个 datetime 类型字段是否为同一天(EF6.0)
1. 需求描述
1) 我们都知道在 C# 中需要比较两个日期类型是否为同一天,只需要写这样的代码 dateTime1.Date == dateTime2.Date 就可以了,但是如果在 Linq 中这样去写会报错的,原因是 Linq 不支持 Date 属性。
2) 如果是 SQL,我们可以这样写 CAST(GETDATE() AS date) 来获取日期,但是 Linq 又不提供这种调用转换函数的方法,但是提供了一个 TruncateTime 方法,用于清除时间部分。
2. 具体实现(部分代码)
(System.Data.Entity.DbFunctions.TruncateTime(d7.PayTime) == System.Data.Entity.DbFunctions.TruncateTime(d1.VisitTime))
3. 生成SQL(部分代码)
((convert (datetime2, convert(varchar(255), [Extent18].[PayTime], 102) , 102)) = (convert (datetime2, convert(varchar(255), [Filter10].[VisitTime], 102) , 102)))
2. SqlFunctions 类的使用实例
1) 查询手机号码以 158 开头的学生列表(EF6.0)
1. 需求描述
本示例演示调用 MSSQL 的 CHARINDEX 函数。
2. 具体实现
List<Student> list_2_1 = (from t1 in dbContext.Students
where System.Data.Entity.SqlServer.SqlFunctions.CharIndex("158", t1.MobileNumber, 1) > 0
select t1).ToList();
3. 生成SQL(部分代码)
WHERE ( CAST(CHARINDEX(N'158', [Extent1].[MobileNumber], 1) AS int)) > 0
3. SqlMethods 类的使用实例
1) 查询邮箱为 QQ 邮箱的学生列表
List<Student> list_3_1 = (from t1 in dbContext.Students
where SqlMethods.Like(t1.Email, "%qq%")
select t1).ToList();
2) 经测试(EF4.0/5.0/6.0),都会以下错误,所以决定暂不研究:
LINQ to Entities 不识别方法“Boolean Like(System.String, System.String)”,因此该方法无法转换为存储表达式。
LINQ to SQL 调用 SQL Server 的系统函数的更多相关文章
- mssql sql server 其它系统函数 parsename 点语法字符串分割函数应用简介
转自:http://www.maomao365.com/?p=4534 一. parsename函数功能简介 parsename函数的主要功能是:可以快速的使用”.”关键字分解字符串,并返回.分解后指 ...
- Ubuntu vim+ ctags(包含系统函数) + taglist 配置 分类: vim ubuntu 2015-06-09 18:19 195人阅读 评论(0) 收藏
阅读大型代码,我们经常需要打开很多的代码文件,搜索各种定义.windows下用惯了ide的朋友,转战Linux的时候可能会觉得很难受,找不到合适的阅读工具.其实万能的vim就可以实现.下面介绍一下vi ...
- SQL Server如何定位自定义标量函数被那个SQL调用次数最多浅析
前阵子遇到一个很是棘手的问题,监控系统DPA发现某个自定义标量函数被调用的次数非常高,高到一个离谱的程度.然后在Troubleshooting这个问题的时候,确实遇到了一些问题让我很是纠结,下文是解决 ...
- SQL Server 2000 系统存储过程
SQL Server 2000 系统存储过程 在 Microsoft? SQL Server? 中,许多管理和信息活动可以通过系统存储过程执行.系统存储过程按这些分类分组. 分类 描述 Active ...
- SQL Server游标 C# DataTable.Select() 筛选数据 什么是SQL游标? SQL Server数据类型转换方法 LinQ是什么? SQL Server 分页方法汇总
SQL Server游标 转载自:http://www.cnblogs.com/knowledgesea/p/3699851.html. 什么是游标 结果集,结果集就是select查询之后返回的所 ...
- SQL Server系统函数:系统信息函数
原文:SQL Server系统函数:系统信息函数 1.会话id,服务器信息.用户信息 select @@SPID, --返回当前连接的会话ID:SPID @@servername, --SQL Ser ...
- SQL Server系统函数:类型转换函数
原文:SQL Server系统函数:类型转换函数 1.基本的转化 SELECT CAST(2008 as varchar(4)) + ' year!' SELECT CONVERT(varchar(4 ...
- Sql Server函数全解(五)之系统函数
系统信息包括当前使用的数据库名称,主机名,系统错误消息以及用户名称等内容.使用SQL SERVER中的系统函数可以在需要的时候获取这些信息.下面介绍系统函数的作用和使用方法. 1.返回表中指定字段的 ...
- VS中调用SQL SERVER存储过程
存储过程是经过编译的,永久保存在数据中的一组SQL语句,通过创建和使用存储过程能够提高程序的重用性和扩展性,为程序提供模块化的功能,还有利于对程序的维护和管理.以下就详谈一下,VB.NET怎样调 ...
随机推荐
- Python中的一些小技巧
1.Boolean值可以当做一个数值 a = [5,6,7,8,9] print(a[True]) #prints 6 print(a[False]) #prints 5 2.两种方法实现 a = 1 ...
- 云数据库PolarDB(一)
一.出现的背景及PolarDB简介 阿里云,中国第一家拥有完整云计算能力的企业. 2015年,在计算界的奥运会Sort Benchmark中,阿里云计算100TB数据排序只用了不到7分钟,把Apach ...
- zabbix相关
链接:https://pan.baidu.com/s/1gjwZrJGCYM1NWJhhK7IhiQ 密码:76nm
- CF1012B Chemical table
$CF1012B Chemical table 给你一个 \(n\times m\) 的矩形,一开始有 \(q\) 个格子上被标记.对于任意两行两列,如果交汇的四个格子中有三个被标记,那么第 \(4\ ...
- map和unordered_map的差别和使用
map和unordered_map的差别还不知道或者搞不清unordered_map和map是什么的,请见:http://blog.csdn.net/billcyj/article/details/7 ...
- Spring Security Oauth2 的配置
使用oauth2保护你的应用,可以分为简易的分为三个步骤 配置资源服务器 配置认证服务器 配置spring security 前两点是oauth2的主体内容,但前面我已经描述过了,spring sec ...
- 全国天气预报信息数据 API 功能简介与代码调用实战视频
此文章对开放数据接口 API 之「全国天气预报信息数据 API」进行了功能介绍.使用场景介绍以及调用方法的说明,供用户在使用数据接口时参考之用,并对实战开发进行了视频演示. 1. 产品功能 接口开放了 ...
- mysql8 安装笔记
环境 redhat6.8 ,官网下载 rpm x64 Bund 安装包 安装 rpm -ivh xxx.rpm 安装一系列的rpm. mysql 会创建 mysql 用户及组./etc/my.cnf ...
- python print 在windows上 出现 Bad file descriptor error
先说一下情况,一个python写的采集程序,做成windows服务在windows上运行. 这个问题出现的挺奇特,本来一套采集程序,一个采集文件的时候没问题,两个采集文件的时候也没问题,当三个采集文件 ...
- 使用axios post 提交数据,后台获取不到
https://www.cnblogs.com/yiyi17/p/9409249.html(copy https://www.cnblogs.com/loveyaxin/p/8385694.html( ...