by Kimi
18. November 2009 11:39
Kimi
示例1:
简单的Min和Max操作。

运行结果:

示例2:
查询处字符串数组中,长度最大和最小的字符。

显示结果:

示例3:
在Group操作中使用Min 和 Max。

显示结果:

Average 的操作与Max 和 Min 相同,只是取平均值。
51f261f7-fd0f-4d9a-b20a-729179811889|0|.0
Tags: linq
技术文章
by Kimi
9. November 2009 16:09
Kimi
在写SQL的时候,我们经常会遇到一种情况。那就是一个表中的某个列是自增的标识列,在插入记录到这个表后,我们需要返回这个标识列的值。
我们通常都会习惯性的使用@@IDENTITY 来获得这个值。其实SQL Server 不只提供一个@@IDENTITY这个一个方式来获得新插入自增标识列的值,还有 SCOPE_IDENTITY 和 IDENT_CURRENT 这两个函数。下面我们就来看看这个3个函数的区别,以及我们如何正确的选用它们。
下面先给出MSDN上对这3个函数的描述:
|
@@IDENTITY
返回最后插入的标识值的系统函数
备注:
在一条 INSERT、SELECT INTO 或大容量复制语句完成后,@@IDENTITY 中包含语句生成的最后一个标识值。如果语句未影响任何包含标识列的表,则 @@IDENTITY 返回 NULL。如果插入了多个行,生成了多个标识值,则 @@IDENTITY 将返回最后生成的标识值。如果语句触发了一个或多个触发器,该触发器又执行了生成标识值的插入操作,那么,在语句执行后立即调用 @@IDENTITY 将返回触发器生成的最后一个标识值。如果对包含标识列的表执行插入操作后触发了触发器,并且触发器对另一个没有标识列的表执行了插入操作,则 @@IDENTITY 将返回第一次插入的标识值。出现 INSERT 或 SELECT INTO 语句失败或大容量复制失败,或者事务被回滚的情况时,@@IDENTITY 值不会恢复为以前的设置。
|
|
SCOPE_IDENTITY()
返回插入到同一作用域中的标识列内的最后一个标识值。一个范围是一个模块:存储过程、触发器、函数或批处理。因此,如果两个语句处于同一个存储过程、函数或批处理中,则它们位于相同的作用域中。
备注:
SCOPE_IDENTITY 和 @@IDENTITY 返回在当前会话中的任何表内所生成的最后一个标识值。但是,SCOPE_IDENTITY 只返回插入到当前作用域中的值;@@IDENTITY 不受限于特定的作用域。
|
|
IDENT_CURRENT
返回为某个会话和作用域中指定的表或视图生成的最新的标识值。
备注:
IDENT_CURRENT 返回为某个会话和用域中的指定表生成的最新标识值。在空表中调用 IDENT_CURRENT 函数时,此函数将返回 NULL。
|
从MSDN上看,这3个函数的主要区别就是一个会话和作用域的问题:
-
IDENT_CURRENT 返回为某个会话和用域中的指定表生成的最新标识值。
-
@@IDENTITY 返回为跨所有作用域的当前会话中的某个表生成的最新标识值。
-
SCOPE_IDENTITY 返回为当前会话和当前作用域中的某个表生成的最新标识值。
接下来,我们需要通过示例来看看这个3个函数的区别
|
-- 创建一个表TA, 为它定义一个自增列ID, 默认这个列是从开始自增.
CREATE TABLE TA(ID int IDENTITY);
-- 创建另一个表TB, 为它定义一个自增列ID, 设置这个列是从开始自增.
CREATE TABLE TB(ID int IDENTITY(100,1));
GO
-- 为表TA 创建一个INSERT的出发器,让给TA 表插入数据后, 给TB 表也插入数据.
CREATE TRIGGER TA_INSERT ON TA FOR INSERT
AS
BEGIN
INSERT TB DEFAULT VALUES
END;
GO
SELECT * FROM TA;
--ID is empty.
SELECT * FROM TB;
--ID is empty.
-- 在一个会话(session)中运行这些语句. --------------------
-- 向TA表插入一条默认记录.
INSERT TA DEFAULT VALUES;
SELECT @@IDENTITY;
/* 返回的值是100. 因为使用的是@@IDENTITY, 它得到的结果是触发器执行的插入数据到TB表后返回的标识列的值.*/
SELECT SCOPE_IDENTITY();
/* 返回的值是1. 因为向TA表插入的一条记录, 然而SCOPE_IDENTITY()是不能垮作用域的,那么它只获得插入TA表操作时返回的标识列的值.*/
SELECT IDENT_CURRENT('TB');
/* 返回插入TB表的标识列的值, 100.*/
SELECT IDENT_CURRENT('TA');
/* 返回插入TA表的标识列的值, 1.*/
-- 在另一个会话(session)中运行这些语句.
SELECT @@IDENTITY;
/* 返回的是NULL, 因为当前会话(session)中没有插入操作.*/
SELECT SCOPE_IDENTITY();
/* 返回的是NULL, 因为当前会话(session)当前作用域中没有插入操作*/
SELECT IDENT_CURRENT('TB');
/* 返回最后插入TB表的标识列的值, 100.*/
|
注意的一点是,作用域指的是一个模块:存储过程、触发器、函数或批处理。因此,如果两个语句处于同一个存储过程、函数或批处理中,则它们位于相同的作用域中。我们来看一个示例:
|
-- 创建一个存储过程, 其功能就是往TA表插入一条记录
CREATE PROCEDURE usp_ins_TA
AS
BEGIN
INSERT TA DEFAULT VALUES;
END
-- 插入一条记录到TA表.
INSERT TA DEFAULT VALUES;
-- 调用存储过程插入一条记录到TA表.
EXECUTE usp_ins_TA;
SELECT @@IDENTITY;
/* 返回的结果是2, 因为执行了两次插入操作. */
SELECT SCOPE_IDENTITY();
/* 返回的结果是1, 因为尽管执行了两次操作, 但是第二次操作是调用一个存储过程, 那么它属于另一个范围内. */
SELECT IDENT_CURRENT('TA');
/* 返回的结果是2, 因为执行了两次插入操作. */
|
通过这两个示例,我想大家应该明白了这个3个函数的用法。(Kimi 2009-03-25)
by Kimi
9. November 2009 09:19
Kimi Yang
示例1:
通过Sum计算出数组的和。

运行结果为:

示例2:
计算出字符串数组中的所有的字母个数。

运行结果为:

示例3:
在Group中使用Sum

运行结果为:

8dd114b9-2dd1-4c4c-b2a9-d63b16d48347|0|.0
Tags: linq
技术文章
by Kimi
4. November 2009 09:07
Kimi Yang
示例1:
使用Count,统计数组中的元素个数。

运行结果:

示例2:
带条件的Count, 统计数组中的奇数个数。

运行结果:

示例3:
嵌套的Count。

运行结果:

示例4:
在Group中使用Count。

运行结果:

fe2d6db5-20bc-4503-9b81-dc07598be48a|0|.0
Tags: linq
技术文章
by Kimi
23. October 2009 10:40
Kimi Yang
Microsoft在10月21日发布了Visual Studio 2010 Beta2 的测试版。在Visual Studio 2010 的产品系列中,分为如下几个版本:
-
Microsoft® Visual Studio 2010 Professional Edition
-
Microsoft® Visual Studio 2010 Premium Edition
-
Microsoft® Visual Studio 2010 Ultimate Edition
今天我就来尝试安装和试用一下Visual Studio 2010 Beta2。首先是在官方网站上下载了安装的ISO文件,由于里面没有包括MSDN帮助文件,所以只有2.3G左右。

把ISO 加载入虚拟光驱,运行安装。



貌似一点也不省空间。

去掉了几个不用的选项,貌似还是很大,而且占用的是C盘,o(╯□╰)o。

不管那么多了,开始安装。(中间没有步骤提示输入序列号)

现在可以去泡杯茶喝了……
当安装完.Net Framework 4.0 Beta 2的时候,系统提示重启。

终于安装完成了,现在启动看看,启动的等待画面还真不错!

图标也变了样了。

挺不错的,现在来看看IDE界面。启动界面也不一样了。

由于VS2010的IDE界面是使用WPF技术来创建,所有在Vista,Windows 7这样的系统中,效果会非常好。
新建项目中,跟2008一样,可以选择其它.NET平台的版本进行开发。

2010的另一个亮点,就是提供一个动态语言F#,由于我不太了解,就不多说了。

我们主要关注的还是Web开发,所以在Web项目中,多了MVC2这个版本。

OK,今天的安装非常成功,今后在学习中有些什么新玩意儿,会第一时间给大家分享。
139aac88-5d33-4a20-8b39-969f8cad68d9|0|.0
Tags: .net 4
技术文章
by Kimi
14. October 2009 12:33
Kimi Yang
Any
示例:
检查数组中是否有数字小于5。

运行结果:

All
示例:
检查数组中是否都是奇数。

运行结果:

cbca8230-9ca8-4ced-9b7d-a910bee3aec1|0|.0
Tags: linq
技术文章
by Kimi
14. October 2009 12:32
Kimi Yang
Range
示例:
获得从11开始的10个数字序列,并通过Select 创建一个匿名类型。

运行结果:

Repeat
示例:
生成一个序列,包含5个100。

显示结果:

cd216c1c-f79e-44a2-91ba-7d25470d35c2|0|.0
Tags: linq
技术文章
by Kimi
18. September 2009 13:12
Kimi Yang
对于现在的web系统开发,千万别只顾着IE6 这个过时了不能再过时的浏览器,应该想想如何兼容当前主流的浏览器。
当下主流的浏览器有这些:
我想大家应该都熟悉这些,只不过Safari知道的人少一些,这个是苹果机器上的浏览器。当然它肯定有For Windows版本了(要不能我怎么可以装上)。其实还有其它一些浏览器,比如遨游,QQ的浏览器,360的浏览器等,这些都是基于IE内核的,所以IE能兼容,这些也都能兼容。
那么,我们开发一个Web系统,为了能支持这些浏览器,首先开发的时候尽量用标准的方式,比如标准的HTML,标准的CSS,标准的脚本等。
测试的时候呢,尽量能够把这些浏览器都能简单的过一遍。特别是你写了很多脚本的地方,这个特别容易出现浏览器兼容问题。
这里还有一个工具可以推荐给大家,Microsoft Expression Studio 3 中,提供了一个工具叫做 Microsoft Expression Web 3 SuperPreview。
看到这个界面,就知道是干什么的吧。 它可以模拟 FireFox(版本根据你机器安装的相关),IE6,IE7,IE8 对网页的渲染情况。
美中不足的是,他只能包含这几种浏览器,比如我的Chrome,Opera等,就不能在这里面应用,据说要等到下个版本才可以。
另外,我还发现一个小问题,Google Chrome浏览器,竟然没有大图标显示。我想这个应该要改进一下。
a23f1ef9-b0ff-417b-a58f-457d53e9263e|0|.0
Tags:
使用技巧
by Kimi
18. September 2009 12:46
Kimi Yang
First,Last
示例1:

运行结果:

示例2:
加有Index的First和Last操作。

运行结果:

示例3:
演示FirstOrDefault 和 LastOrDefault。

运行结果:

ElementAt
示例:

运行结果:

f9587f6f-56c7-4e29-8842-419908eb1c67|0|.0
Tags: linq
技术文章
by Kimi
27. August 2009 12:31
Kimi Yang
ToArray
示例:
定义一个匿名类型的结合,对集合进行查询操作,并把结果转换成int数组。
运行结果:

ToList 和 ToArray操作相同。
ToDictionary
示例:
通过ToDictionary把结合的元素存储到一个Dictionary中。

运行结果:

OfType
示例:
使用OfType,取得集合中类型符合的元素。

运行结果:

6c3a4cd4-368c-470a-8286-65333466180f|0|.0
Tags: linq
技术文章