千家信息网

LINQ to SQL删除实现的示例分析

发表于:2026-11-03 作者:千家信息网编辑
千家信息网最后更新 2026年11月03日,LINQ to SQL删除实现的示例分析,针对这个问题,这篇文章详细介绍了相对应的分析和解答,希望可以帮助更多想解决这个问题的小伙伴找到更简单易行的方法。在实现LINQ to SQL删除时可以使用La
千家信息网最后更新 2026年11月03日LINQ to SQL删除实现的示例分析

LINQ to SQL删除实现的示例分析,针对这个问题,这篇文章详细介绍了相对应的分析和解答,希望可以帮助更多想解决这个问题的小伙伴找到更简单易行的方法。

在实现LINQ to SQL删除时可以使用Lambda Expression批量删除数据那么在解析表达式过程中生成Where Condition会有大量的代码生成。

根据LINQ to Sql原有的设计,解析Query得到DbCommand应该是SqlProvider干的事,只是现在这个SqlProvider只从IReaderProvider出(事实上MS也没设计个IUpdateProvider或者IDeleteProvider来着),所以也只对SELECT感冒。搞的咱们只能在DataContext里自力更生了。

LINQ to SQL删除实现的实例:

不过既然已经有了可以生成SELECT的IReaderProvider,稍微把SELECT语句改造一下不就能得到DELETE了吗!基本思路:

public static int DeleteAll﹤TEntity﹥(  this Table﹤TEntity﹥ table,   Expression﹤Func﹤TEntity, bool﹥﹥ predicate)  where TEntity : class  {  IQueryable query = table.Where(predicate);  DbCommand com = dc.GetCommand(query);   //TODO:改造sql语句   return com.ExecuteNonQuery();   }  }

这里直接拿直接拿where生成的query来GetCommand,得到的sql语句大致如下:

SELECT fields... FROM tableName AS TableAlias WHERE Condition

LINQ to SQL删除的目标:

DELETE FROM tableName WHERE Condition

可见关键是得到tableName,用正则是***。不过这里还有一个缺陷就是只能用expression来做删除不能用linq query,比如我想这样:

var query = from item in context.Items  where item.Name.StartsWith("XX")  select item;  context.DeleteAll(query);

看来要把DeleteAll放到DataContext里,不过这样有风险,有可能会接受到无法转换的SELECT语句,增加判断必不可少。

LINQ to SQL删除最终完成如下:

public static class DataContextEx  {  public static int DeleteAll(  this DataContext dc, IQueryable query)  {  DbCommand com = dc.GetCommand(query);   Regex reg = new Regex("^SELECT[\\s]*(?﹤Fields﹥.*)  [\\s]*FROM[\\s]*(?﹤Table﹥.*)[\\s]*AS[\\s]*  (?﹤TableAlias﹥.*)[\\s]*WHERE[\\s]*(?﹤Condition﹥.*)",  RegexOptions.IgnoreCase);   Match match = reg.Match(com.CommandText);   if (!match.Success)  throw new ArgumentException(  "Cannot delete this type of collection");   string table = match.Groups["Table"].Value.Trim();  string tableAlias = match.Groups["TableAlias"].Value.Trim();  string condition = match.Groups["Condition"].  Value.Trim().Replace(tableAlias, table);   com.CommandText = string.Format(  "DELETE FROM {0} WHERE {1}", table, condition);   if (com.Connection.State != System.Data.ConnectionState.Open)  com.Connection.Open();   return com.ExecuteNonQuery();  }    public static int DeleteAll﹤TEntity﹥(  this Table﹤TEntity﹥ table, Expression﹤Func﹤TEntity, bool﹥﹥ predicate)  where TEntity : class {  IQueryable query = table.Where(predicate);   return table.Context.DeleteAll(query);  }  }

注:reg表达式取自MSDN Forum

关于LINQ to SQL删除实现的示例分析问题的解答就分享到这里了,希望以上内容可以对大家有一定的帮助,如果你还有很多疑惑没有解开,可以关注行业资讯频道了解更多相关知识。

语句 分析 问题 生成 示例 更多 表达式 帮助 改造 解答 设计 易行 自力更生 简单易行 事实 事实上 代码 代码生成 关键 内容 数据库的安全要保护哪些东西 数据库安全各自的含义是什么 生产安全数据库录入 数据库的安全性及管理 数据库安全策略包含哪些 海淀数据库安全审计系统 建立农村房屋安全信息数据库 易用的数据库客户端支持安全管理 连接数据库失败ssl安全错误 数据库的锁怎样保障安全 互联网高科技 高科技互联网 广州宏创互联网科技 科技互联网公司logo 多迪互联网科技有限公司 北京大学互联网科技怎么样 互联网金融科技公司干啥的 互联网科技有哪些公司 和信科技工业互联网 辽宁互联网新科技 互联网科技人工智能实验室 浙南科技城互联网大厦建设工程 互联网科技创新的路径 华中科技大学互联网的牛人 陕西云淼互联网科技公司 南京一网一红互联网科技有限公司 科技互联网行业投资研究 保山互联网科技靠谱吗 互联网时代高科技布局 科技互联网公司两年变化 广东猪兼强互联网科技有限公司 山东特亿宝互联网科技有限公司 互联网科技排名 镁科技互联网资讯平台 深圳市运趣互联网科技有限公司 互联网为啥属于高科技 彤创互联网科技有限公司 华夏互联网科技业 深圳市罗太互联网科技有限公司 深圳艾果互联网通讯科技
0