成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

LINQ to SQL刪除實現體會小結

開發 后端
LINQ to SQL刪除的實現我們會碰到使用Lambda Expression批量刪除數據的方法,那么這里就向你介紹在學習使用Lambda Expression批量刪除數據實現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了嗎!基本思路:

  1. public static int DeleteAll﹤TEntity﹥(  
  2. this Table﹤TEntity﹥ table,   
  3. Expression﹤Func﹤TEntity, bool﹥﹥ predicate)  
  4. where TEntity : class  
  5. {  
  6. IQueryable query = table.Where(predicate);  
  7. DbCommand com = dc.GetCommand(query);  
  8.  
  9. //TODO:改造sql語句  
  10.  
  11. return com.ExecuteNonQuery();  
  12.  }  
  13. }  

這里直接拿直接拿where生成的query來GetCommand,得到的sql語句大致如下:

  1. SELECT fields... FROM tableName AS TableAlias WHERE Condition 

LINQ to SQL刪除的目標:

  1. DELETE FROM tableName WHERE Condition 

可見關鍵是得到tableName,用正則是***。不過這里還有一個缺陷就是只能用expression來做刪除不能用linq query,比如我想這樣:

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

看來要把DeleteAll放到DataContext里,不過這樣有風險,有可能會接受到無法轉換的SELECT語句,增加判斷必不可少。

LINQ to SQL刪除最終完成如下:

  1. public static class DataContextEx  
  2. {  
  3. public static int DeleteAll(  
  4. this DataContext dc, IQueryable query)  
  5. {  
  6. DbCommand com = dc.GetCommand(query);  
  7.  
  8. Regex reg = new Regex("^SELECT[\\s]*(?﹤Fields﹥.*)  
  9. [\\s]*FROM[\\s]*(?﹤Table﹥.*)[\\s]*AS[\\s]*  
  10. (?﹤TableAlias﹥.*)[\\s]*WHERE[\\s]*(?﹤Condition﹥.*)",  
  11. RegexOptions.IgnoreCase);  
  12.  
  13. Match match = reg.Match(com.CommandText);  
  14.  
  15. if (!match.Success)  
  16. throw new ArgumentException(  
  17. "Cannot delete this type of collection");  
  18.  
  19. string table = match.Groups["Table"].Value.Trim();  
  20. string tableAlias = match.Groups["TableAlias"].Value.Trim();  
  21. string condition = match.Groups["Condition"].  
  22. Value.Trim().Replace(tableAlias, table);  
  23.  
  24. com.CommandText = string.Format(  
  25. "DELETE FROM {0} WHERE {1}", table, condition);  
  26.  
  27. if (com.Connection.State != System.Data.ConnectionState.Open)  
  28. com.Connection.Open();  
  29.  
  30. return com.ExecuteNonQuery();  
  31. }  
  32.  
  33.  
  34. public static int DeleteAll﹤TEntity﹥(  
  35. this Table﹤TEntity﹥ table, Expression﹤Func﹤TEntity, bool﹥﹥ predicate)  
  36. where TEntity : class 
  37. {  
  38. IQueryable query = table.Where(predicate);  
  39.  
  40. return table.Context.DeleteAll(query);  
  41. }  
  42. }  

注:reg表達式取自MSDN Forum

原文來自博客園:http://www.cnblogs.com/jackielin/archive/2008/03/07/1095602.html

LINQ to SQL刪除的實現過程中的一點體會就向你介紹到這里,希望對你了解和學習LINQ to SQL刪除有所幫助。

【編輯推薦】

  1. LINQ to SQL Table淺談
  2. LINQ to sql更新實體概述
  3. LINQ實體繼承簡單描述
  4. LINQ Library概述
  5. LINQ to SQL刪除實現淺析
責任編輯:仲衡 來源: 博客園
相關推薦

2009-09-14 09:46:00

LINQ to SQL

2009-09-14 13:17:51

LINQ to SQLLINQ to SQL

2010-09-01 15:30:24

SQL刪除

2009-09-14 10:29:02

LINQ刪除記錄

2010-08-04 09:55:34

LINQ to SQL

2009-09-08 14:45:24

Linq to SQL支持SQL Serve

2009-09-14 10:45:33

LINQ刪除數據

2009-04-02 10:37:52

通用基類SQLLINQ

2009-09-14 16:00:51

LINQ基本操作LINQ

2009-09-14 16:12:57

LINQ刪除記錄

2009-09-14 15:45:28

LINQ刪除XML節點

2009-09-15 14:52:15

linq級聯刪除

2009-09-07 17:09:45

Linq To Sql

2009-09-08 13:07:15

介紹Linq to S

2009-09-10 10:37:15

LINQ to SQL

2009-09-09 18:03:47

LINQ to SQL

2009-09-10 18:02:23

LINQ to SQL

2009-09-15 10:46:04

LINQ to SQL

2009-09-16 09:38:27

LINQ To SQL

2009-09-18 13:23:27

Northwind對象LINQ to SQL
點贊
收藏

51CTO技術棧公眾號

主站蜘蛛池模板: 真人毛片 | av网站免费在线观看 | 久久伊人影院 | 亚洲国产一区二区三区 | 成人亚洲性情网站www在线观看 | 免费激情 | 国产精品高潮呻吟久久aⅴ码 | 性做久久久久久免费观看欧美 | 91精品国产乱码久久蜜臀 | 国产日韩一区二区三免费高清 | 成人av网站在线观看 | 涩涩导航 | 日韩三级在线 | 日韩一区二区久久 | 成av在线 | 欧美一级淫片免费视频黄 | 久久99精品久久久久 | 午夜视频在线播放 | 在线观看免费黄色片 | 日本久久久久久久久 | 一区二区播放 | 日韩精品免费在线 | 国产一区二区三区四 | 日韩精品在线观看免费 | 国产美女自拍视频 | 91久久久久久久久久久 | 欧美在线视频一区 | 久草精品视频 | 国产免费视频 | 午夜免费观看网站 | 国产精品美女久久久久久免费 | 91精品一区二区三区久久久久久 | 亚洲精品www | 97人人澡人人爽91综合色 | 色婷婷精品国产一区二区三区 | 久久久久久久久久久久久久久久久久久久 | 亚洲高清在线观看 | 日韩在线三级 | 国产激情一区二区三区 | 欧美一级免费看 | 欧美精品一区二区免费 |