1:不同DataContext返回不同结果的问题。因为Linq会先在内存中查询先前的记录,并修改,这点有点类似于dataset,这就可以接解释返回的差异问题了。所以可以尝试使用单例模式来实现一个DC。
2: 狂吐血,今天才知道,string实现了IEnumerable接口。
3:非泛型集合可以通过:books.cast<Book>()=>泛型集合。
4:Linq动态创建SQL(http://tomasp.net/blog/dynamic-linq-queries.aspx)
5: Linq to SQL 在调试时查看其生成的SQL 语句 的工具 (scottgu写的,而且开源,很值得学习)。
6:DataLoadOptions类,用来声明哪些对象需要跟随一起加载从而避免延迟加载带来的重复访问问题。
7:LINQ: Building an IQueryable Provider Linq to SQL 架构师之一的Matt Warren
的博客,详细讲述了如何实现自定义IQueryable提供器的办法。
8:在InsertOnSubmit或DeleteOnSubmit中是等待SubmitChanges()才执行的,所以不会反应到查询中去。
另:
1)查询视情况会在缓存中检查先前查询过的对象;
2)singleXXX方法时必先检查内部缓存;
3)不同的Context相互间是缓存是分开的,所以不同的Context返回不同的结果很正常;
9:处理只读数据时创建新Context对象将ObjectTrackingEnable设置为False并及时销毁Context对象来提高性能。
10:控制需要修改实体的作用范围,谨慎对待需要修改实体对性能的消耗。
11:修改的另一种方式,使用Context的Attach()方法,它有多个重载,用来将对象于现有Context关联,我比较喜欢这种修改方式。
12:查询表达式模式,这个东西太爽了,虽然它用的就是扩展方法,但是能自己实现编译器的实现是一种激动