走进Linq Linq to SQL源代码赏析
在DataContext中我们打交道最多的也许就是GetTable<TEntity>()方法了,这个方法会获取一个Table<TEntity>对象,今天我们就来看看这个对象是如何获取的。
对于获取Table<TEntity>对象我们还要看看这个DataContext是不是强类型的,关于强类型的DataContext可以看我前面一篇文章,强类型的DataContext里包含有几个Table<TEntity>类型的属性,比如我们的库中有blogs、posts等数据
库表,那么你可能就会建立Table<Blog>和Table<Post>类型的属性(参见前面一篇文章)。在上一章DataContext的初始化里讲到Init方法的最后一行是InitTables方法的调用。我们首先来看看InitTables方法的代码:
///<summary>
///初始化数据库中有几个表
///从方法实现中意图来看,这个方法主要在定义了强类型的DataContext才有意义
///在强类型的DataContext里一般定义了Table<Post>之类的字段来表示数据库中有几个
///表,该方法调用DataContext的GetTable方法设置这些字段的值
///</summary>
///<paramname="schema"></param>
private void InitTables(objectschema)
{
//用反射遍历DataContext类(可能是它的子类)里所有的公有实例字段
foreach(FieldInfo info in schema.GetType().GetFields(BindingFlags.Public|BindingFlags.Instance))
{
//字段类型
Type fieldType=info.FieldType;
//该字段是否是泛型的,并且是Table<>类型的,而且该字段的值为null
if((fieldType.IsGenericType&&(fieldType.GetGenericTypeDefinition()==
typeof(Table<>)))&&(((ITable)info.GetValue(schema))==null))
{
//获取Table<TEntity>中TEntity的具体类型
Typetype=fieldType.GetGenericArguments()[0];
//调用DataContext的GetTable方法得到一个ITable对象
ITable table=this.GetTable(type);
//设置值
info.SetValue(schema,table);
}
}
}
代码中的注释说的很详细了,先看看DataContext类里是否有Table<TEntity>的属性,而只有在强类型的DataContext情况下才会有的。所以只有在强类型的情况下才会在初始化DataContext的时候设置这些Table<
相关文档:
create PROCEDURE pagelist
@tablename nvarchar(50),
@fieldname nvarchar(50)='*',
@pagesize int output,--每页显示记录条数
@currentpage int output,--第几页
@orderid nvarchar(50),--主键排序
@sort int,--排序方式,1表示升序,0表示降序排列
......
在sql server2005中怎么进行多值与多值之间的比较?可以比较吗?
例如:
我要证明1,2,3,4,5(在表中查询出的值)与3,2,6,5(自定义参数)两条数据中有相同的值,并将相同值的列的相应表信息用print打印出来
注意,不能单个比较……
不知道可不可查询出来, 请各位高手帮帮忙……
......
写了一段例子,通过sql创建一个job,定期执行一些清除工作。在sql2005上测试通过。
sql帮助文档太零散了。这是一个完整的流程。不过注意定时执行时需要sql server agent服务器启动的。
USE msdb ;
GO
EXEC dbo.sp_add_job
@job_name = N'Clear oldest HB',
@enabled = 1,
@description = N'Clear heart ......
一、具有主键的情况
I.具有唯一性的字段id(为唯一主键)
delete 用户表
where id not in
(
select max(id) from 用户表 group by col1,col2,col3...
)
group by 子句后跟的字段就是你用来判断重复的条件,如只有col1,
那么只要col1字段内容相同即表示记录相同。
II. ......