老赵的博客:http://blog.zhaojie.me/2008/02/using-translate-method-and-modify-command-text-before-query-in-linq-to-sql.html

http://www.csharpwin.com/dotnetspace/9639r2943_2.shtml

1、DataContext扩展方法
public static class DataContextExentions
{
/// <summary>
/// 打开连接
/// </summary>
/// <param name="dataContext"></param>
private static void OpenConnection(this DataContext dataContext)
{
if (dataContext.Connection.State == ConnectionState.Closed)
{
dataContext.Connection.Open();
}
} /// <summary>
/// 扩展ExecuteQuery方法
/// </summary>
/// <typeparam name="T"></typeparam>
/// <param name="dataContext"></param>
/// <param name="query"></param>
/// <param name="withNoLock"></param>
/// <returns></returns>
public static List<T> ExecuteQuery<T>(this DataContext dataContext, IQueryable query, bool withNoLock)
{
DbCommand command = dataContext.GetCommand(query, withNoLock); dataContext.OpenConnection(); using (DbDataReader reader = command.ExecuteReader())
{
return dataContext.Translate<T>(reader).ToList();
}
} /// <summary>
/// 扩展ExecuteQuery方法2
/// </summary>
/// <typeparam name="T"></typeparam>
/// <param name="dataContext"></param>
/// <param name="query"></param>
/// <param name="withNoLock"></param>
/// <returns></returns>
public static List<T> ExecuteQuery<T>(this DataContext dataContext, IQueryable query)
{
DbCommand command = dataContext.GetCommand(query);
dataContext.OpenConnection(); using (DbDataReader reader = command.ExecuteReader())
{
return dataContext.Translate<T>(reader).ToList();
}
} /// <summary>
/// 扩展GetCommend方法,允许设置WithNoLick
/// </summary>
/// <param name="dataContext"></param>
/// <param name="query"></param>
/// <param name="withNoLock"></param>
/// <returns></returns>
private static SqlCommand GetCommand(this DataContext dataContext, IQueryable query, bool withNoLock)
{
SqlCommand command = (SqlCommand)dataContext.GetCommand(query); if (withNoLock)
{
command.CommandText = AddWithNoLock(command.CommandText);
} return command;
} /// <summary>
/// 将Sql语句修改为with nolock
/// </summary>
/// <param name="cmdText"></param>
/// <returns></returns>
private static string AddWithNoLock(string cmdText)
{
IEnumerable<Match> matches =
s_withNoLockRegex.Matches(cmdText).Cast<Match>()
.OrderByDescending(m => m.Index);
foreach (Match m in matches)
{
int splitIndex = m.Index + m.Value.Length;
cmdText =
cmdText.Substring(, splitIndex) + " WITH (NOLOCK)" +
cmdText.Substring(splitIndex);
} return cmdText;
} private static Regex s_withNoLockRegex = new Regex(@"(] AS [td+])", RegexOptions.Compiled);
}
}
2、DataContext扩展方法支持分页
/// <summary>
/// DataContext扩展方法
/// </summary>
public static class DataContextExtends
{
/// <summary>
/// ExecuteQuery方法扩展,将对象以redader方式转换为实体
/// </summary>
/// <typeparam name="T"></typeparam>
/// <param name="dataContext"></param>
/// <param name="query"></param>
/// <returns></returns>
public static List<T> ExecuteQuery<T>(this DataContext dataContext, IQueryable<object> query)
{
return ExecuteQuery<T>(dataContext, query, , query.Cast<T>().Count());
} /// <summary>
/// ExecuteQuery方法扩展,代表分页的
/// </summary>
/// <typeparam name="T"></typeparam>
/// <param name="dataContext"></param>
/// <param name="query"></param>
/// <param name="pageIndex"></param>
/// <param name="pageSize"></param>
/// <returns></returns>
public static List<T> ExecuteQuery<T>(this DataContext dataContext, IQueryable<object> query, int pageIndex, int pageSize)
{
int total = query.Count();
int totalPages = total / pageSize; if (total % pageSize > )
totalPages++; if (pageIndex > totalPages)
{
pageIndex = totalPages;
}
if (pageIndex < )
{
pageIndex = ;
}
query.Skip((pageIndex - ) * pageSize).Take(pageSize).ToList();
DbCommand command = dataContext.GetCommand(query);
dataContext.OpenConnection();
using (DbDataReader reader = command.ExecuteReader())
{
return dataContext.Translate<T>(reader).ToList();
}
}
private static void OpenConnection(this DataContext dataContext)
{
if (dataContext.Connection.State == ConnectionState.Closed)
dataContext.Connection.Open();
} }

linq to sql 扩展方法的更多相关文章

  1. C#编程(六十一)------------LINQ中的扩展方法

    原文链接: http://blog.csdn.net/shanyongxu/article/details/47208401 LINQ中的扩展方法 LINQ中where扩展方法,要想使用,必须导入us ...

  2. Linq快速入门——扩展方法

    Linq为我们提供了许多扩展方法,方便我们对数据源进行操作(Where,Select...).即使你不了解算法,也能使用Linq当回牛人.扩展方法本质并不是什么高深的技术,说白了就是一个Static静 ...

  3. Linq 下的扩展方法太少了,您期待的 MoreLinq 来啦

    一:背景 1. 讲故事 前几天看同事在用 linq 给内存中的两个 model 做左连接,用过的朋友都知道,你一定少不了一个叫做 DefaultIfEmpty 函数,这玩意吧,本来很流畅的 from. ...

  4. Linq to sql 语法方法示例

    联表查询,判断追加条件,对集合分页 ) { var data = from m in _db.AppArticleComment join o in _db.AppArticle on m.Artic ...

  5. linq 的Distinct 扩展方法.

    List<miniclass> classs = new List<miniclass>(); classs.Add(new miniclass() { token = &qu ...

  6. LinQ—扩展方法

    概述 本节主要解说扩展方法,涉及LinQ的详细知识不多. 扩展方法的描写叙述 .net framework为编程人员提供了非常多的类,非常多的方法,可是,不论.net framework在类中为我们提 ...

  7. Linq扩展方法获取单个元素

    在使用Linq 提供的扩展方法时,First(OrDefault), Single(OrDefault), Last(OrDefault)都具有返回单个元素的功能.MSDN对这些方法的描述只有功能说明 ...

  8. Windows Phone本地数据库(SQLCE):2、LINQ to SQL(翻译)(转)

    首先.要说到的是,windows phone 7.1上基本的数据库功能是SQL Compact关于Mango的一个实现,使用linq to sql访问存储在数据库上的数据.   1.LINQ to S ...

  9. 从扩展方法到匿名方法再到LINQ

    1.首先我们应该知道什么是扩展方法: 扩展方法使您能够向现有类型“添加”方法,而无需创建新的派生类型.重新编译或以其他方式修改原始类型. 扩展方法是一种特殊的静态方法,但可以像扩展类型上的实例方法一样 ...

随机推荐

  1. poj 1611 The Suspects(简单并查集)

    题目:http://poj.org/problem?id=1611 0号是病原,求多少人有可能感染 #include<stdio.h> #include<string.h> # ...

  2. mysql 查看表的类型

    MySQL 数据表主要支持六种类型 ,分别是:BDB.HEAP.ISAM.MERGE.MYISAM.InnoBDB. 这六种又分为两类,一类是”事务安全型”(transaction-safe),包括B ...

  3. 深入理解Java虚拟机 - 垃圾收集算法与垃圾收集器

    1. 垃圾收集算法       JVM的垃圾收集算法在不同的JVM实现中有所不同,且在平时工作中一般不会深入到收集算法,因此只对算法做较为简单的介绍.       1.1 标记-清除算法        ...

  4. [原]Unity3D深入浅出 - GUI控件

    Unity的GUI类提供了丰富的界面控件,通过组合这些控件,完成和用户交互的界面. Lable:绘制文本和图片 Box:绘制一个图形框 Button:绘制一个响应单击事件的按钮 RepeatButto ...

  5. apache开源项目--solr

    solr 名称来源 Search On Lucene Replication solr 基本概况 Apache Solr (读音: SOLer) 是一个开源的搜索服务器.Solr 使用 Java 语言 ...

  6. 【原创】深度神经网络(Deep Neural Network, DNN)

    线性模型通过特征间的现行组合来表达“结果-特征集合”之间的对应关系.由于线性模型的表达能力有限,在实践中,只能通过增加“特征计算”的复杂度来优化模型.比如,在广告CTR预估应用中,除了“标题长度.描述 ...

  7. 【Java】Java运行cmd命令直接导出.sql文件

    Java中的Runtime.getRuntime().exec(commandStr)可以调用执行cmd命令 package Util; import java.io.File; import jav ...

  8. 静态Web开发 DOM

    四章 Dom 1节dom中的顶级对象 dom(文档对象模型)js最终是要操作html页面,让html变成DHtml,而操作Html页面就要用到DOMDOM可以吧Html页面模拟成一个对象,如果js只是 ...

  9. C# 有关文件路径的操作

    1. 由文件全路径,获取文件扩展名.文件名等信息 string fullPath = @"\WebSite1\Default.aspx"; string filename = Sy ...

  10. java 多线程下载

    import java.io.ByteArrayOutputStream; import java.io.InputStream; public class StreamTool { /** * 把一 ...