学习Linq时,经常会遇到Linq To SQL数据问题,这里将介绍Linq To SQL数据问题的解决方法。
很久之前,在我刚学数据库编程的时候,就希望直接建一个数据库通用的操作类, 即写 Insert(类实例), 那么剩下的工作就交给底层代码来实现如何Insert。 现在接触了Linq, 感觉离这个梦想的实现已经不远了。
下面就分享一下我的源代码,很简单,估计刚学Linq的人也能看懂。
1. 建一个project 命名为DLinq ,添加一个Linq To SQL数据源,这里以经典的Northwind数据库为例,命名为NWDB.dbml 。
2. 建另一个Project 为DAL层 ,添加一个Table工厂, 这样我们就可以通过实体来获得Table
- using System;
- using System.Collections.Generic;
- using System.Linq;
- using System.Text;
- namespace DAL
- {
- public staticclass TableFactory
- {
- public static System.Data.Linq.Table<T> CreateTable<T>() where T : class
- {
- return Database.NWDB.GetTable<T>();
- }
- }
- }
- using System;
- using System.Collections.Generic;
- using System.Linq;
- using System.Text;
- namespace DAL
- {
- publicstatic class Database
- {
- private static DLinq.NWDBDataContext _NWDB = null;
- public static DLinq.NWDBDataContext NWDB
- {
- get
- {
- if (_NWDB == null)
- _NWDB = new DLinq.NWDBDataContext();
- return _NWDB;
- }
- }
- }
- }
3. 借助Linq的特性,现在就可以写通用的数据库操作类了
- using System;
- using System.Collections.Generic;
- using System.Linq;
- using System.Text;
- namespace DAL
- {
- public class Utility
- {
- public static void Insert<T>(T TEntity) where T : class
- {
- var table = TableFactory.CreateTable<T>();
- table.InsertOnSubmit(TEntity);
- }
- public static IEnumerable<T> Where<T>(Func<T, bool> predicate) where T : class
- {
- var table = TableFactory.CreateTable<T>();
- return table.Where(predicate).AsEnumerable();
- }
- public static void SubmitChanges()
- {
- Database.NWDB.SubmitChanges();
- }
- }
- }
【编辑推荐】