您的位置:知识库 » 数据库

走进Linq-Linq to SQL How do I(1)

作者: 横刀天笑  来源: 博客园  发布时间: 2008-09-23 18:57  阅读: 14487 次  推荐: 2   原文链接   [收藏]  

系列文章导航:

走进Linq--Linq横空出世篇

走进Linq-辉煌的背后

走进Linq-Linq大观园

不能不说的C#特性-对象集合初始化器

不能不说的C#特性-匿名类型与隐式类型局部变量

不能不说的C#特性-扩展方法

不能不说的C#特性-匿名方法和Lambda表达式

不能不说的C#特性-迭代器(上)及一些研究过程中的副产品

不能不说的C#特性-迭代器(下),yield以及流的延迟计算

走进Linq-Linq to Objects(上)基础篇

走进Linq-Linq to Objects(下)实例篇

走进Linq-Linq to SQL感性认识篇

走进Linq-Linq to SQL How do I(1)

走进Linq-Linq to SQL How do I(2)

走进Linq-Linq to SQL How do I(3)

走进Linq-How do I(4)拾遗补零篇第一节

走进Linq-Linq to SQL源代码赏析 Table的获取过程

走进Linq-Linq to SQL源代码赏析之Provider的初始化

走进Linq-Linq to SQL源代码赏析,通过Linq to SQL看Linq


但是不是所有的C#的方法都可以使用呢?答案是否定的。比如:

var posts = from post in dbContext.GetTable<Post>()
         
where post.Title.StartsWith("y")
         select post.CreateDate.ToString(
"yyyy-MM-dd");

我想对最后查出来的文章的创建时间做个格式化,居然报错了,说不支持这种“翻译”。那看来每次我们做查询的时候是要先try一下。

上面只是做了筛选的实例,你还可以去尝试一下排序和分组,这个和Linq to Objects里的用法是一样的,你可以到前面的文章里复习一下。

Step 5:插入对象

本系列的文章到现在为止都是在介绍查询,难道Linq to SQL只能做查询么?不能向数据库添加数据?,肯定不是的:

Table<Post> posts = dbContext.GetTable<Post>();
//先实例化一个新的要插入的对象
Post post = new Post();
post.BlogId 
= 2;
post.Title 
= "test";
post.Body 
= "test,test,test,test";
post.CreateDate 
= DateTime.Now;
//调用Table的InsertOnSubmit方法
posts.InsertOnSubmit(post);
//把改变提交到数据库,这个时候才真正执行了
dbContext.SubmitChanges();
//提交修改后,你就可以查询新插入的post的Id了
Console.WriteLine(post.Id);

生成的SQL语句:

一个简单的不能再简单的insert into语句,加上一条返回新插入记录的标识值的语句。

如果你按照本文所说的一步步往下来,在执行上面的插入的时候肯定会碰到异常,这是因为,Id对应的数据表字段postid是该表的主键,你不应该在插入的时候赋值,有人说我实例化对象的时候确实没有给postId属性赋值啊,但是.net会在后台为我们将Id赋值为0,所以你要对映射对象做一下修改:

[Column(Name="postid",IsPrimaryKey=true,IsDbGenerated=true)]
public int Id { getset; }
不仅仅数据表的主键要加这个属性,如果对于那些在数据库里设置了默认值的,你并不像用程序插入的时候,你也得使用,比如这里的CreateDate

2
0
标签:LINQ LINQ to SQL

数据库热门文章

    数据库最新文章

      最新新闻

        热门新闻