SQL 、LINQ日前比较
using Newtonsoft.Json;
using Newtonsoft.Json.Linq;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Net;
using System.Net.Http;
using System.Text;
using System.Threading.Tasks; namespace ConsoleApp3
{
class Program
{
static void Main(string[] args)
{
var queryJson = "";
var queryParam = queryJson.ToJObject();
DateTime startTime = queryParam["StartTime"].ToDate();
DateTime endTime = queryParam["EndTime"].ToDate();
//DateTime endTime = queryParam["EndTime"].ToDate().AddDays(1);//结束时间
//Ling比较
List<test> query = new List<test>();
var list = query.Where(t => t.F_LogTime>= startTime && t.F_LogTime < endTime);
//SQL比较
var sql = "SELECT" + DbTimeType.DbTimeTypeFormat("F_LogTime", DbHelper.DbType) +" FROM DUAL WHERE F_LogTime>=" + DbTimeType.DateTimeToDbTimeType(startTime, DbHelper.DbType) + "AND F_LogTime<=" + DbTimeType.DateTimeToDbTimeType(endTime, DbHelper.DbType);
sql += " and F_LogTime>=" + DbTimeType.DateTimeToDbTimeType(startTime, DbHelper.DbType) + " and F_LogTime<" + DbTimeType.DateTimeToDbTimeType(endTime, DbHelper.DbType);
} }
public class test
{
public DateTime? F_LogTime { get; set; }
}
}
一、建立一个数据库帮助类 DbHelper
using System;
using System.Collections.Generic;
using System.Data;
using System.Data.Common;
using System.Linq;
using System.Text;
using System.Threading.Tasks; namespace ConsoleApp3
{
public class DbHelper
{
/// <summary>
/// 数据库类型
/// </summary>
public static DatabaseType DbType { get; set; } #region 构造函数
/// <summary>
/// 构造方法
/// </summary>
public DbHelper(DbConnection _dbConnection)
{
dbConnection = _dbConnection;
dbCommand = dbConnection.CreateCommand();
dbCommand.CommandTimeout = CommandTimeout = ;
}
#endregion #region 属性
/// <summary>
/// 执行超时时间
/// </summary>
public int CommandTimeout
{
get
{
return dbCommand.CommandTimeout;
}
set
{
dbCommand.CommandTimeout = value;
}
} /// <summary>
/// 数据库连接对象
/// </summary>
private DbConnection dbConnection { get; set; }
/// <summary>
/// 执行命令对象
/// </summary>
private IDbCommand dbCommand { get; set; }
/// <summary>
/// 关闭数据库连接
/// </summary>
public void Close()
{
if (dbConnection != null)
{
dbConnection.Close();
dbConnection.Dispose();
}
if (dbCommand != null)
{
dbCommand.Dispose();
}
}
#endregion /// <summary>
/// 执行SQL返回 DataReader
/// </summary>
/// <param name="cmdType">命令的类型</param>
/// <param name="strSql">Sql语句</param>
/// <returns></returns>
public IDataReader ExecuteReader(CommandType cmdType, string strSql)
{
//Oracle.DataAccess.Client
return ExecuteReader(cmdType, strSql, null);
}
/// <summary>
/// 执行SQL返回 DataReader
/// </summary>
/// <param name="cmdType">命令的类型</param>
/// <param name="strSql">Sql语句</param>
/// <param name="dbParameter">Sql参数</param>
/// <returns></returns>
public IDataReader ExecuteReader(CommandType cmdType, string strSql, params DbParameter[] dbParameter)
{
try
{
PrepareCommand(dbConnection, dbCommand, null, cmdType, strSql, dbParameter);
IDataReader rdr = dbCommand.ExecuteReader(CommandBehavior.CloseConnection);
return rdr;
}
catch (Exception)
{
Close();
throw;
}
}
/// <summary>
/// 执行查询,并返回查询所返回的结果集
/// </summary>
/// <param name="cmdType">命令的类型</param>
/// <param name="strSql">Sql语句</param>
/// <returns></returns>
public object ExecuteScalar(CommandType cmdType, string strSql)
{
return ExecuteScalar(cmdType, strSql);
}
/// <summary>
/// 执行查询,并返回查询所返回的结果集
/// </summary>
/// <param name="cmdType">命令的类型</param>
/// <param name="strSql">Sql语句</param>
/// <param name="dbParameter">Sql参数</param>
/// <returns></returns>
public object ExecuteScalar(CommandType cmdType, string cmdText, params DbParameter[] parameters)
{
try
{
PrepareCommand(dbConnection, dbCommand, null, cmdType, cmdText, parameters);
object val = dbCommand.ExecuteScalar();
dbCommand.Parameters.Clear();
return val;
}
catch (Exception)
{
Close();
throw;
}
}
/// <summary>
/// 为即将执行准备一个命令
/// </summary>
/// <param name="conn">SqlConnection对象</param>
/// <param name="cmd">SqlCommand对象</param>
/// <param name="isOpenTrans">DbTransaction对象</param>
/// <param name="cmdType">执行命令的类型(存储过程或T-SQL,等等)</param>
/// <param name="cmdText">存储过程名称或者T-SQL命令行, e.g. Select * from Products</param>
/// <param name="dbParameter">执行命令所需的sql语句对应参数</param>
private void PrepareCommand(DbConnection conn, IDbCommand cmd, DbTransaction isOpenTrans, CommandType cmdType, string cmdText, params DbParameter[] dbParameter)
{
if (conn.State != ConnectionState.Open)
conn.Open();
cmd.Connection = conn;
cmd.CommandText = cmdText;//DbParameters.ToDbSql(cmdText);
if (isOpenTrans != null)
cmd.Transaction = isOpenTrans;
cmd.CommandType = cmdType;
if (dbParameter != null)
{
dbParameter = DbParameters.ToDbParameter(dbParameter);
foreach (var parameter in dbParameter)
{
cmd.Parameters.Add(parameter);
}
}
}
}
}
二、建立一个数据库类型类 DatabaseType
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks; namespace ConsoleApp3
{
public enum DatabaseType
{
/// <summary>
/// 数据库类型:SqlServer
/// </summary>
SqlServer,
/// <summary>
/// 数据库类型:MySql
/// </summary>
MySql,
/// <summary>
/// 数据库类型:Oracle
/// </summary>
Oracle,
/// <summary>
/// 数据库类型:Access
/// </summary>
Access,
/// <summary>
/// 数据库类型:SQLite
/// </summary>
SQLite
}
}
三、日期处理类 DbTimeType
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks; namespace ConsoleApp3
{
public class DbTimeType
{
public static string DateTimeToDbTimeType(DateTime time, DatabaseType dbType = DatabaseType.Oracle)
{
string result = string.Empty;
switch (dbType)
{
case DatabaseType.SqlServer:
result = "'" + time.ToString("yyyy-MM-dd HH:mm:ss") + "'";
break;
case DatabaseType.MySql:
result = "'" + time.ToString("yyyy-MM-dd HH:mm:ss") + "'";
break;
case DatabaseType.Oracle:
result = "TO_DATE('" + time.ToString("yyyy-MM-dd HH:mm:ss") + "', 'yyyy-MM-dd HH24:MI:ss')";
break;
default:
throw new Exception("数据库类型目前不支持!");
}
return result;
}
public static string DbTimeTypeFormat(string colunmName, DatabaseType dbType = DatabaseType.SqlServer)
{
string result = string.Empty;
switch (dbType)
{
case DatabaseType.SqlServer:
{
result = "CONVERT(varchar(100)," + colunmName + ", 102)";
break;
}
case DatabaseType.MySql:
{
result = "DATE_FORMAT(" + colunmName + ",'%Y-%m-%d')";
break;
}
case DatabaseType.Oracle:
{
result = "to_char(" + colunmName + ",'yyyy-MM-dd')";
break;
}
default:
{
throw new Exception("数据库类型目前不支持!");
}
}
return result;
} }
}
四、Json操作类 Json
using Newtonsoft.Json;
using Newtonsoft.Json.Converters;
using Newtonsoft.Json.Linq;
using System;
using System.Collections.Generic;
using System.Data;
using System.Linq;
using System.Text;
using System.Threading.Tasks; namespace ConsoleApp3
{
/// <summary>
/// Json操作
/// </summary>
public static class Json
{
public static object ToJson(this string Json)
{
return Json == null ? null : JsonConvert.DeserializeObject(Json);
}
public static string ToJson(this object obj)
{
var timeConverter = new IsoDateTimeConverter { DateTimeFormat = "yyyy-MM-dd HH:mm:ss" };
return JsonConvert.SerializeObject(obj, timeConverter);
}
public static string ToJson(this object obj, string datetimeformats)
{
var timeConverter = new IsoDateTimeConverter { DateTimeFormat = datetimeformats };
return JsonConvert.SerializeObject(obj, timeConverter);
}
public static T ToObject<T>(this string Json)
{
return Json == null ? default(T) : JsonConvert.DeserializeObject<T>(Json);
}
public static List<T> ToList<T>(this string Json)
{
return Json == null ? null : JsonConvert.DeserializeObject<List<T>>(Json);
}
public static DataTable ToTable(this string Json)
{
return Json == null ? null : JsonConvert.DeserializeObject<DataTable>(Json);
}
public static JObject ToJObject(this string Json)
{
return Json == null ? JObject.Parse("{}") : JObject.Parse(Json.Replace(" ", ""));
}
}
}
五、类型转换扩展类 Extensions
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks; namespace ConsoleApp3
{
/// <summary>
/// 类型转换扩展
/// </summary>
public static partial class Extensions
{
#region 数值转换
/// <summary>
/// 转换为整型
/// </summary>
/// <param name="data">数据</param>
public static int ToInt(this object data)
{
if (data == null)
return ;
int result;
var success = int.TryParse(data.ToString(), out result);
if (success)
return result;
try
{
return Convert.ToInt32(ToDouble(data, ));
}
catch (Exception)
{
return ;
}
} /// <summary>
/// 转换为可空整型
/// </summary>
/// <param name="data">数据</param>
public static int? ToIntOrNull(this object data)
{
if (data == null)
return null;
int result;
bool isValid = int.TryParse(data.ToString(), out result);
if (isValid)
return result;
return null;
} /// <summary>
/// 转换为双精度浮点数
/// </summary>
/// <param name="data">数据</param>
public static double ToDouble(this object data)
{
if (data == null)
return ;
double result;
return double.TryParse(data.ToString(), out result) ? result : ;
} /// <summary>
/// 转换为双精度浮点数,并按指定的小数位4舍5入
/// </summary>
/// <param name="data">数据</param>
/// <param name="digits">小数位数</param>
public static double ToDouble(this object data, int digits)
{
return Math.Round(ToDouble(data), digits);
} /// <summary>
/// 转换为可空双精度浮点数
/// </summary>
/// <param name="data">数据</param>
public static double? ToDoubleOrNull(this object data)
{
if (data == null)
return null;
double result;
bool isValid = double.TryParse(data.ToString(), out result);
if (isValid)
return result;
return null;
} /// <summary>
/// 转换为高精度浮点数
/// </summary>
/// <param name="data">数据</param>
public static decimal ToDecimal(this object data)
{
if (data == null)
return ;
decimal result;
return decimal.TryParse(data.ToString(), out result) ? result : ;
} /// <summary>
/// 转换为高精度浮点数,并按指定的小数位4舍5入
/// </summary>
/// <param name="data">数据</param>
/// <param name="digits">小数位数</param>
public static decimal ToDecimal(this object data, int digits)
{
return Math.Round(ToDecimal(data), digits);
} /// <summary>
/// 转换为可空高精度浮点数
/// </summary>
/// <param name="data">数据</param>
public static decimal? ToDecimalOrNull(this object data)
{
if (data == null)
return null;
decimal result;
bool isValid = decimal.TryParse(data.ToString(), out result);
if (isValid)
return result;
return null;
} /// <summary>
/// 转换为可空高精度浮点数,并按指定的小数位4舍5入
/// </summary>
/// <param name="data">数据</param>
/// <param name="digits">小数位数</param>
public static decimal? ToDecimalOrNull(this object data, int digits)
{
var result = ToDecimalOrNull(data);
if (result == null)
return null;
return Math.Round(result.Value, digits);
} #endregion #region 日期转换
/// <summary>
/// 转换为日期
/// </summary>
/// <param name="data">数据</param>
public static DateTime ToDate(this object data)
{
if (data == null)
return DateTime.MinValue;
DateTime result;
return DateTime.TryParse(data.ToString(), out result) ? result : DateTime.MinValue;
} /// <summary>
/// 转换为可空日期
/// </summary>
/// <param name="data">数据</param>
public static DateTime? ToDateOrNull(this object data)
{
if (data == null)
return null;
DateTime result;
bool isValid = DateTime.TryParse(data.ToString(), out result);
if (isValid)
return result;
return null;
} #endregion #region 布尔转换
/// <summary>
/// 转换为布尔值
/// </summary>
/// <param name="data">数据</param>
public static bool ToBool(this object data)
{
if (data == null)
return false;
bool? value = GetBool(data);
if (value != null)
return value.Value;
bool result;
return bool.TryParse(data.ToString(), out result) && result;
} /// <summary>
/// 获取布尔值
/// </summary>
private static bool? GetBool(this object data)
{
switch (data.ToString().Trim().ToLower())
{
case "":
return false;
case "":
return true;
case "是":
return true;
case "否":
return false;
case "yes":
return true;
case "no":
return false;
default:
return null;
}
} /// <summary>
/// 转换为可空布尔值
/// </summary>
/// <param name="data">数据</param>
public static bool? ToBoolOrNull(this object data)
{
if (data == null)
return null;
bool? value = GetBool(data);
if (value != null)
return value.Value;
bool result;
bool isValid = bool.TryParse(data.ToString(), out result);
if (isValid)
return result;
return null;
} #endregion #region 字符串转换
/// <summary>
/// 转换为字符串
/// </summary>
/// <param name="data">数据</param>
public static string ToString(this object data)
{
return data == null ? string.Empty : data.ToString().Trim();
}
#endregion
}
}
SQL 、LINQ日前比较的更多相关文章
- SQL/LINQ/Lamda 写法[转发]
SQL LINQ Lambda SELECT * FROM HumanResources.Employee from e in Employees select e Employees .Sele ...
- SQL Linq lamda区别
SQL LINQ Lambda SELECT * FROM HumanResources.Employee from e in Employees select e Employees .Sele ...
- SQL/LINQ/Lamda
SQL LINQ Lambda SELECT * FROM HumanResources.Employee from e in Employees select e Employees .Sele ...
- SQL,LINQ,Lambda语法对照图(转载)
如果你熟悉SQL语句,当使用LINQ时,会有似曾相识的感觉.但又略有不同.下面是SQL和LINQ,Lambda语法对照图 SQL LINQ Lambda SELECT * FROM HumanReso ...
- SQL,Linq,Lambda之间的转换练习
1.查询Student表中的所有记录的Sname.Ssex和Class列. SQL:select sname,ssex,class from Students linq:from s in Stude ...
- LINQ / LINQ to SQL / LINQ to XXX 它们到底有什么区别
LINQ是新生事物,不过从不少文章和讨论上看来,这方面的概念也已经有点混沌不清了.因此我们经常可以看到这样的话: LINQ只能将数据表与实体属性一一对应…… LINQ开发指南:在LINQ中进行数据库字 ...
- SQL&&LINQ:左(外)连接,右(外)连接,内连接,完全连接,交叉连接,多对多连接
SQL: 外连接和内连接: 左连接或左外连接:包含左边的表的所有行,如果右边表中的某行没有匹配,该行内容为空(NULL) --outer jion:left join or left outer jo ...
- sql linq lambda 对比
. 查询Student表中的所有记录的Sname.Ssex和Class列. select sname,ssex,class from student Linq: from s in Students ...
- SQL、Linq、lamda表达式 同一功能不同写法
一.SQL.Linq.lamda表达式 同一功能不同写法 SQL LINQ Lambda SELECT * FROM HumanResources.Employee from e in Employe ...
随机推荐
- kill和raise
kill向特定的进程和进程组发送信号 raise向进程自身发送信号
- C. Maximum Median 二分
C. Maximum Median 题意: 给定一个数组,可每次可以选择一个数加1,共执行k次,问执行k次操作之后这个数组的中位数最大是多少? 题解:首先对n个数进行排序,我们只对大于中位数a[n/2 ...
- 报警视图 报警窗口 报警指示器 的组态 PLC变量 事故信息 MW16 报警确认变量 MW18 转速变量 MW20 温度变量 MW22 用 M17.0 来模拟事故信息的最低位。用PLCSIM 给定温度为800 度 报警视图与报警窗口显示故障
组态报警并用PLCSIM进行仿真 步骤1 : 组态离散变量报警 在PLC 的默认变量表中 创建变量"事故信息" 数据类型是word 绝对地址是MW16 同时建立 报警确认变量 MW ...
- SpringCloud实战——(3)通过RESTful方式调用模块的方法
在项目中创建一个类,编写如下内容: package com.f*iservice.controller; import org.springframework.web.bind.annotation. ...
- 五、生产者消费者模型_ThreadLocal
1.生产者消费者模型作用和示例如下:1)通过平衡生产者的生产能力和消费者的消费能力来提升整个系统的运行效率 ,这是生产者消费者模型最重要的作用2)解耦,这是生产者消费者模型附带的作用,解耦意味着生产者 ...
- 使用input选择本地图片,并且实现预览功能
1.使用input标签选择本地图片文件 用一个盒子来存放预览的图片 2.JS实现预览 首先添加一个input change事件,再用到 URL.createObjectURL() 方法 用来创建 UR ...
- java学习-循环结构-递归练习1-汉诺塔问题
相传在印度圣庙中,有一种被称为汉诺塔(Hanoi)的游戏.该游戏是在一块铜板装置上,有三根杆(编号A.B.C),在A杆自下而上.由大到小按顺序放置64个金盘(如下图).游戏的目标:把A杆上的金盘全部移 ...
- 图解jvm--(一)jvm内存结构
jvm内存结构 1.程序计数器 1.1 定义 Program Counter Register 程序计数器(寄存器) 作用,记住下一条jvm指令的执行地址 特点 是线程私有的 (唯一)不会存在内存溢出 ...
- 解决modelsim破解在win10下无法生成license
显示没有找到mgls.dll,此时,这个教程能够帮助你. 1.右击搜索结果cmd,选择以管理员身份运行 2. 打开win64(进入安装目录的win64),也就是两个破解文件所在的路径,输入cd win ...
- Day9 - D - Piggy-Bank POJ - 1384
Before ACM can do anything, a budget must be prepared and the necessary financial support obtained. ...