首先需要在项目中新增一个 linq to sql 的服务
新增项,数据,LINQ TO sql 类的这个方法
第二步需要一个model类,用作映射
[Table]
public class S_ZDB
{
//每一个属性都需要加上[Column]
[Column]
public string ZDMC { get; set; }
[Column]
public string ZDLX { get; set; }
//下面这个属性是主键
[Column(IsPrimaryKey = true)]
public Guid ZDBH { get; set; }
[Column]
public DateTime CJRQ { get; set; }
[Column]
public string BZ { get; set; }
}
需要在类上面加上[Table]这个属性
做完这些就可以对数据库的值进行操作了
第一步获取配置文件的数据库属性
public static string sqldata = ConfigurationManager.ConnectionStrings["sql"].ConnectionString;
第二步创建连接对象
DataContext dt = new DataContext(sqldata);
接下来就是对数据库简单的增删改查
查询是最简单的
注意,没有进过转换的数据如Table<T>的数据,都是映射的
Table<S_ZDB> TB = dt.GetTable<S_ZDB>();
IQueryable<S_ZDB> IQ = from i in dt.GetTable<S_ZDB>() select i;
如果需要转换成list<T>集合,直接这样就好了
// List<S_ZDB> li = (from i in dt.GetTable<S_ZDB>() select i).ToList();
下面是对查询的拓展
//查询部分数据
var ex = from i in dt.GetTable<S_ZDB>() select new { ZDMC = i.ZDMC };
var ex1 = TB.Select(i => new { ZDLX = i.ZDLX }); //查询第一条数据
var ex2 = TB.First();
//查询数据表单中的单个元素,如果出现多个则抛出异常,没有则返回null
//方法 序列为null时 序列不包含任何元素时 序列只包含一个元素时 序列包含多个元素时
//Single 引发异常 引发异常 返回该元素 引发异常
//SingleOrDefault 引发异常 返回default(TSource) 返回该元素 引发异常
//First 引发异常 引发异常 返回该元素 返回第一个元素
//FirstOrDefault 引发异常 返回default(TSource) 返回该元素 返回第一个元素
//Last 引发异常 引发异常 返回该元素 返回最后一个元素
//LastOrDefault 引发异常 返回default(TSource) 返回该元素 返回最后一个元素
var ex3 = TB.SingleOrDefault(p => p.ZDMC == "别墅" && p.ZDLX == "户型"); //查询的分页显示
//这里10表示每页显示数量,1代表页数 ,跳过数据,获取剩下的数据
List<S_ZDB> li1 = (li.Skip(10 * (1 - 1))).ToList();
//显示数据
List<S_ZDB> li2 = (li1.Take(10)).ToList(); //条件查询
var ex4 = from i in TB where i.ZDLX != "户型" select i; //排序和分组查询
var ex5 = from i in TB orderby i.ZDLX select i;
//分组部分
var ex6 = from i in TB
group i by i.ZDLX into LX
orderby LX.Key
select new
{
ZDLX = LX.Key,
ZDMC = LX
}; //循环展示分组结果
foreach (var mc in ex6)
{
Console.WriteLine("类型:{0}", mc.ZDLX);
foreach (S_ZDB Z in mc.ZDMC)
{
Console.WriteLine("类型:{0}", Z.ZDMC);
}
} //聚集,显示每个分组的数量
var ex7 = from i in TB
group i by i.ZDLX into LX
orderby LX.Key
select new
{
ZDLX = LX.Key,
ZDMC = LX.Count()
}; //循环展示分组结果
foreach (var mc in ex7)
{
Console.WriteLine("类型:{0},数量:{1}", mc.ZDLX, mc.ZDMC);
} //连接,多表查询
var ex8 = from i in TB
join j in IQ on i.ZDMC equals j.ZDMC
select new { i.ZDMC };
var ex9 = from i in TB
from j in IQ
where i.ZDMC == j.ZDMC
select new { i.ZDMC };
//新增数据
S_ZDB s = new S_ZDB();
s.ZDMC = "2";
s.ZDLX = "资质等级";
s.ZDBH = new Guid("00000000-0000-0000-0000-000000000000");
s.CJRQ = DateTime.Now;
s.BZ = "wu";
//将新的数据添加到TB中;
TB.InsertOnSubmit(s); //提交数据,因为数据是映射的关系,所有将数据提交可以直接修改
dt.SubmitChanges();
//修改数据
//应为数据不完全无法插入数据库
var ex10 = from i in dt.GetTable<S_ZDB>()
where i.ZDLX == "资质等级" && i.ZDMC == "2"
select i;
foreach (S_ZDB i in ex10)
{
i.ZDMC = "1";
}
dt.SubmitChanges();
//提交数据
//删除数据
TB.DeleteOnSubmit(S);
var zd = dt.GetTable<S_ZDB>().Select(i => i).Where(i => i.ZDMC == "2" && i.ZDLX == "资质等级");
var z = from i in TB where i.ZDMC == "2" && i.ZDLX == "资质等级" select i;
TB.DeleteAllOnSubmit(z);
//提交数据,因为数据是映射的关系,所有将数据提交可以直接修改
dt.SubmitChanges();