轉: 建一個 Linq 資料庫通用的操作類 (上)

來源:互聯網
上載者:User
1. 建一個project 命名為DLinq ,添加一個Linq To SQL 的資料來源,這裡以經典的Northwind資料庫為例,命名為NWDB.dbml 。

    

    2

    

    2. 建另一個Project 為DAL層 ,添加一個Table工廠, 這樣我們就可以通過實體來獲得Table

  1. using System;
  2. using System.Collections.Generic;
  3. using System.Linq;
  4. using System.Text;
  5. namespace DAL
  6. {
  7.     public static  class TableFactory
  8.     { 
  9.         public static System.Data.Linq.Table<T> CreateTable<T>() where T : class
  10.         {
  11.             return Database.NWDB.GetTable<T>();
  12.         }
  13.     }
  14. }

 

  1. using System;
  2. using System.Collections.Generic;
  3. using System.Linq;
  4. using System.Text;
  5. namespace DAL
  6. {
  7.     public   static class Database
  8.     {
  9.         private static DLinq.NWDBDataContext _NWDB = null;
  10.         public static DLinq.NWDBDataContext NWDB
  11.         {
  12.             get
  13.             {
  14.                 if (_NWDB == null)
  15.                     _NWDB = new DLinq.NWDBDataContext();
  16.                 return _NWDB;
  17.             }
  18.         }
  19.        
  20.     }
  21. }

    3. 藉助Linq的特性,現在就可以寫通用的資料庫操作類了

 

  1. using System;
  2. using System.Collections.Generic;
  3. using System.Linq;
  4. using System.Text;
  5. namespace DAL
  6. {
  7.     public class Utility
  8.     {
  9.         public static void Insert<T>(T TEntity) where T : class
  10.         {
  11.             var table = TableFactory.CreateTable<T>();
  12.             table.InsertOnSubmit(TEntity);
  13.         }
  14.         public static IEnumerable<T> Where<T>(Func<T, bool> predicate) where T : class
  15.         {
  16.             var table = TableFactory.CreateTable<T>();
  17.             return table.Where(predicate).AsEnumerable();
  18.         }
  19.         public static void SubmitChanges()
  20.         {
  21.             Database.NWDB.SubmitChanges();
  22.         }
  23.     }
  24. }

    4. 現在讓我們來寫個測試方法來測試一下是否成功

 

  1. using System.Collections.Generic;
  2. using System.Linq;
  3. using System.Text;
  4. using DAL;
  5. using DLinq;
  6. namespace DALTest
  7. {
  8.     class Program
  9.     {
  10.         static void Main(string[] args)
  11.         {
  12.             InsertTest();
  13.             WhereTest();
  14.             Console.WriteLine("All testings are success!");
  15.             Console.Read();
  16.         }
  17.         private static void InsertTest()
  18.         {
  19.             Customer _customer=new Customer{ 
  20.                 CustomerID="Bruce",
  21.                  ContactName="Lee",
  22.                  CompanyName ="CodingSky",
  23.                  City ="Shenzhen"};
  24.             Utility.Insert(_customer);
  25.             Utility.SubmitChanges();
  26.         }
  27.         private static void WhereTest()
  28.         {
  29.             var _result= Utility.Where<Customer>(c => c.CustomerID == "Bruce");
  30.             var _list = _result.ToList();
  31.             if (_list.Count == 0)
  32.             {
  33.                 Console.WriteLine("No result!");
  34.                 return;
  35.             }
  36.             Console.WriteLine("Query result is:");
  37.             _list.ForEach(c => Console.WriteLine(Toolkits.StringExtension.ToString(c)));
  38.         }
  39.         
  40.     }
  41. }

    5. 其中WhereTest調用了另一個Project的StringExtension類,這個類主要擴充了ToString方法,通過Reflection 來讀取執行個體的所有屬性以及它們的值。

 

  1. using System;
  2. using System.Collections.Generic;
  3. using System.Linq;
  4. using System.Text;
  5. namespace Toolkits
  6. {
  7.     public class StringExtension
  8.     {
  9.         public static string ToString<T>(T t) where T:class 
  10.         {
  11.             var typeInfo = BLReflection.GetProperties(typeof(T));
  12.             var rType = (from q in typeInfo select new 
  13.             {
  14.                            TypeName=  q.PropertyType.Name,
  15.                            PropName= q.Name ,
  16.                            Value= q.GetValue(t, null)
  17.             }).ToList();
  18.             
  19.             StringBuilder sb = new StringBuilder();
  20.             string header="Class Name: {0}\n";
  21.             sb.AppendFormat(header , typeof(T).Name);
  22.             rType.ForEach(c => sb.Append(String.Format ("\t{0}: {1} ({2}),\n", c.PropName, c.Value,c.TypeName) ));
  23.             string result=sb.ToString ();
  24.             return (result.Length > header.Length ? result.Substring(0, result.Length - 2)+"\n" : header);           
  25.         }
  26.     }
  27. }

    6. 最後,輸出的結果應該是這樣:

 

Query result is:
Class Name: Customer
        CustomerID: Bruce (String),
        CompanyName: CodingSky (String),
        ContactName: Lee (String),
        ContactTitle:  (String),
        Address:  (String),
        City: Shenzhen (String),
        Region:  (String),
        PostalCode:  (String),
        Country:  (String),
        Phone:  (String),
        Fax:  (String),
        Orders: System.Data.Linq.EntitySet`1[DLinq.Order] (EntitySet`1)

 

All testings are success!

 

好,今天就寫到這裡,希望能夠帶給你一點協助!

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.