强类型和弱类型语言:
强类型指的是程序中表达的任何对象所从属的类型都必须能在[编译时刻]确定。
常见的强类型语言有C++、Java和Python等。
弱类型语言也称为弱类型定义语言。与强类型定义相反。
像vb,js,php等就属于弱类型语言。
强类型的优势:
强类型是针对类型检查的严格程度而言的,它指任何变量在使用的时候必须要指定这个变量的类型,
而且在程序的运行过程中这个变量只能存储这个类型的数据。
因此,对于强类型语言,一个变量不经过强制转换,它永远是这个数据类型,不允许隐式的类型转换。
(1)强类型是自定义类所具有的优势,它使得对象处理的数据更容易被理解。
(2)强类型语言在大规模信息系统开发中具有巨大优势。
特别是当设计者定义了由自定义类所组成的数据访问层,并把设计向组织内的其他程序员发布的时候。
它可以通过[类型检查机制]在编译过程中发现许多容易被人忽视的错误,
从而[保证软件的质量],使得大规模的软件集成为可能。
弱类型的劣势:
极易出错
动态类型语言和静态类型语言:
所谓的动态类型语言,意思就是类型的检查是在[运行时]做的,js、Ruby、Python等也都属于动态语言。
所谓的静态类型语言,意思是类型判断是在[运行前]判断(如编译阶段),比如C#、java就是静态类型语言
是不是动态类型语言与这门语言是不是类型安全的完全不相干的,不要将它们联系在一起!
python是强类型的动态语言、解释性语言。
Javascrpt是弱类型的动态语言、解释性语言。
-
自定义关键字_VB编程(七)关键字、标识符和数据类型
2021-01-12 21:31:59常见的关键字有:Dim、Private 、Public 、Static 、Sub 、End 、If 、Else 、From 、Me等等。标识符用来命名常量、变量、模块、类、函数等,命名规则:(1)不能使用系统中的关键字(2)第一个字符必须是字母,后边可以...关键字是指系统中使用的具有特定意义的字符,不能用于定义变量的操作。
常见的关键字有:Dim、Private 、Public 、Static 、Sub 、End 、If 、Else 、From 、Me等等。
标识符用来命名常量、变量、模块、类、函数等,命名规则:
(1)不能使用系统中的关键字
(2)第一个字符必须是字母,后边可以是字母、数字、下划线
(3)不区分大小写
数据类型分以下几种:
1. 基本数据类型
数字型
整型 Integer :由2个字节的二进制数来存储,取值的范围是-32768 ~ +32768 ,声明符 %
长整型 Long :由4个字节的二进制数来存储,取值的范围是-2147483648 ~ 2147483647,声明符 &
单精度 Single :由4个字节的二进制数存储,最多可以表达7位有效数字,声明符 !
双精度 Double :由4个字节的二进制数存储,最多可以表达15位有效数字,声明符 #
货币型 Currency :由8个字节的二进制数存储,声明符 @
字节型 Byte :由1个字节的二进制数存储
字符型
String 声明符 $
字符型包含定长字符串和变长字符串
变长字符串在不超过取值范围的情况下存储任意长度的字符串
定长字符串只能存储指定长度的字符串 String*常数,如果存储的字符 串不足常数指定的长度会用空格补齐,如果超出指定长度超出部分会舍弃。
例如:
定义字符串
上图中的变长字符串在不超过取值范围的情况下存储任意长度的字符 串,定长度为5 如果多了只保留前五个,比如 str2 = “abcdefg” 实际只会存 储”abcde”。
布尔型
Boolean :由2个字节的二进制数存储,只有两个值 True 和 False
True 对应数字型 -1
False 对应数字型 0
日期型
Date #2020 - 10 - 10# 要用#包起来
2.枚举型(变体型)
Variant 可以存储任何类型的数据
3. 自定义数据类型
可以自己定义数据类型,在下图中,定义一个学生类型Student,其中的属性包含姓名、年龄、住址。
定义完之后就可以在代码中使用了。
自定义变量
-
语言的强弱类型和动态静态类型
2017-05-24 20:05:00常见的强类型语言有C++、Java和Python等。弱类型语言也称为弱类型定义语言。与强类型定义相反。像vb,js,php等就属于弱类型语言。强类型的优势:强类型是针对类型检查的严格程度而言的,它指任何变量在使用的时候必须...转载于:https://www.cnblogs.com/adamans/articles/6900745.html
-
VB学生信息管理系统文档
2013-03-21 16:52:18其中最常见的是窗体模块。 窗体模块 窗体模块是应用程序的界面,是运行应用程序时与用户 交互的实际窗口。在窗体中可放置诸如文本框、按钮等控件。 一个VB应用程序可根据需要有一个或多个窗体。每一个窗体 都包含... -
VB.Net冒泡排序代码
2011-02-17 10:34:00VB.Net冒泡排序代码(有详细解释) 冒泡排序是一种最常见的排序方法。VB.Net可写出代码如下: Function BubbleSort(ByVal Ar As Array) Dim i As Integer Dim j As Integer...VB.Net冒泡排序代码(有详细解释)冒泡排序是一种最常见的排序方法。VB.Net可写出代码如下:Function BubbleSort(ByVal Ar As Array)
Dim i As Integer
Dim j As Integer
Dim Temp '不定义变量类型,以自动适应数组Ar的类型
Dim Flag As Boolean
Dim n As Integer = Ar.Length - 1
For i = 1 To n
Flag = False
'从第1个元素开始,比较每两个相邻元素的大小,让大元素下沉,小元素上浮
'经过一轮循环,可使数组中最大元素下沉到数组最底部
'进入下一轮循环,只对前 n - i 个元素进行相邻比较(已排到后面的不用比较)
For j = 0 To n - i
If Ar(j) > Ar(j + 1) Then
Temp = Ar(j)
Ar(j) = Ar(j + 1)
Ar(j + 1) = Temp
Flag = True '如果有排序行为,则设为 True
End If
Next
If Flag = False Then '如未排序,说明已完成整个排序过程,退出
Exit For
End If
Next
End Function
示例
Dim A() As Integer= {5,7,2,4,11,9,6}
BubbleSort(A) 结果会是{2,4,5,6,7,9,11}
Dim B() As String= {"DD","GG","CC","FF","JJ","AA","BB"}
BubbleSort(B) 结果会是{"AA","BB","CC","DD","FF","GG","JJ"}
-
vb中线性拟合_建立非线性回归预测模型,来看R教程!
2021-01-03 23:38:54审稿:龚志忠在统计分析中,根据变量的不同类型可以建立不同的预测模型,如果因变量是连续型变量,最常见的是建立线性回归模型。但是,建立线性回归模型有很多前提条件(可以参考:SPSS操作:简单线性回归(史上最详尽...作者:李健民;审稿:龚志忠
在统计分析中,根据变量的不同类型可以建立不同的预测模型,如果因变量是连续型变量,最常见的是建立线性回归模型。但是,建立线性回归模型有很多前提条件(可以参考:SPSS操作:简单线性回归(史上最详尽的手把手教程))。
由于实际的临床研究中,变量之间关系复杂,因变量和自变量之间并非呈现线性关系,如果强行建立线性回归模型,就会影响模型的预测准确性。对于此类数据,应该如何处理呢?之前医咖会发布过的《R语言课程》,王九谊老师在“多项式回归、分段回归、限制性立方样条...”视频课程中已做了详细介绍。本文以临床医生的角度,通过案例分析,结合R软件来讲解如何建立非线性回归模型,也对之前的视频教程内容作了延伸。
案例说明(模拟数据)
临床中心衰、肝硬化的病人,常伴有体液潴留和低钠血症,医生会选择使用托伐普坦进行超滤治疗,但是目前这个药物价格昂贵,未能广泛使用。
假设有一种新的利尿剂上市,价格便宜,且具有类似作用。为了探究新利尿剂的治疗效果,研究人员开展了一项临床试验,共入组149人(数据库名称为urinetest),因变量为患者每日尿量(变量名为urine),自变量为每日新利尿剂使用剂量(变量名为dosage)。
研究目的是为两者建立最合适的回归模型,分析步骤如下:
1、初步探索数据
2、建立简单线性回归
3、建立曲线方程
4、建立分段回归
5、建立样条回归
6、构建局部加权回归
7、建立广义可加模型
8、总结
分析步骤
分析数据前的准备工作
1、点击impordataset导入数据urinetest
2、数据预览,View(urinetest)
3、加载相关的包,请加载前用install.packages()命令安装好
library(ggplot2)
library(segmented)
library(splines)
library(Hmisc)
library(rms)
library(mgcv)
library(caret)
一、数据探索
ggplot(urinetest, aes(dosage, urine) )+geom_point()#绘制散点图
从图形可以看出,当利尿剂使用剂量<25ml时,病人的尿量在2000-2300ml之间波动。当利尿剂剂量为25-30ml时,两者成线性关系。当>30ml时,随着利尿剂剂量的增加,尿量不再出现明显的变化。
由此看出,两者呈现出一种非线性的变化关系,存在阈值效应和饱和效应,在不同药物剂量范围内,剂量-反应关系函数差别很大,如果强行用单一的线性回归来建立预测建模,不符合临床实际,模型预测的准确性将会大打折扣。下面我们先用线性回归来分析一下。
二、建立线性回归模型
model.lm
summary(model.lm)#查看回归模型结果
模型结果如下:
(1)残差的最大值、最小值、中位数等,描述的是预测值和实际值之差的分布;
(2)回归方程的系数和统计学检验结果;
(3)模型的拟合情况。其中Residual standard error为残差标准误,是模型用自变量预测因变量的平均误差,该值越小说明模型拟合越好;Adjusted R-squared为调整R2,可理解为模型对数据集的解释程度,该值越大模型拟合程度越好。本研究中线性回归模型的残差标准误的值为159.8;调整R2为0.5902。
接下来看看线性回归的拟合效果
ggplot(urinetest, aes(dosage, urine) ) +
geom_point() +
stat_smooth(method = lm, formula = y ~ x)
从图形可以直观看出拟合直线与数据点存在一定的偏离,拟合效果不佳。
三、建立曲线方程
下面尝试用曲线模型去拟合,例如对数曲线型、指数曲线型、S曲线型等。我们以对数曲线为例。
model.log
summary(model.log)#查看模型概况
对数曲线模型的残差标准误的值为151.5,调整R2为0.6318,两个指标比简单线性回归模型略有提高。
#拟合曲线
ggplot(urinetest, aes(dosage, urine)) +
geom_point() +
stat_smooth(method = lm, formula = y ~ log(x))
从图形可以看出,拟合曲线的效果较直线有所改善。
四、建立分段回归模型
在数据探索时我们发现,药物剂量和尿量的散点图分布呈现三段式变化特征,我们以此为依据,建立一个分段回归模型。在R中我们可以使用segmented这个包。
model.segmented
summary(model.segmented)#查看模型概况
分段回归结果显示,软件自动将模型分成了两段,拐点为dosage=32.534,残差标准误为124.9,调整R2为0.7499,两个指标较曲线模型得到了进一步提升。#查看拟合效果
plot(dosage,urine, pch=1, cex=1.5)
abline(a=coef(model.lm)[1],b=coef(model.lm)[2],col="red",lwd= 2.5)
plot(model.segmented, col='blue', lwd= 2.5 ,add=T)
在构建的上述模型中,函数自动将模型分成了两段。但根据对散点图的分析,我们认为将模型分为三段更为合适,此时可以手动设置25和30两个剂量拐点,软件会自动寻找附近的点做为最佳拐点。
#手动设置拐点,分三段回归
model.segmented2
summary(model.segmented2)#查看模型概况
软件找到的两个最佳拐点分别为24.075和30.166,此时分段回归模型的残差标准误为99.01,调整R2为0.8427,预测效果比曲线模型明显提升。
#查看拟合效果
plot(dosage,urine, pch=1, cex=1.5)
abline(a=coef(model.lm)[1],b=coef(model.lm)[2],col="red",lwd= 2.5)
plot(model.segmented2, col='blue', lwd= 2.5 ,add=T)
五、样条回归
上述提到的曲线方程和分段回归两种方法都有一定的缺点。曲线方程是非局部的,当某一个因变量的值发生变化时,即使距离很远的点也会受到影响。如果采用多项式建立曲线方程,当多项式的幂较高时,自变量的一个微小变化,就会引起因变量很大的变化,得出的模型不适合外推到其他数据样本。而在分段回归模型中,每一段都是基于线性回归而建立的,拐点之间的连接显得比较生硬。
那么有没有办法建立一个既具有分段回归模型的优点,又可以拟合比较平滑的模型呢?样条回归则兼具曲线方程和分段回归的优点,可以灵活的分段展示自变量与因变量之间的关系。样条回归把数据集划分成一个个连续的区间,划分的点称为节点,每个节点之间用单独的模型(线性函数或者低阶多项式函数)来拟合。节点越多,模型就越灵活。但是过多的节点也会导致过拟合问题,所以一般先尝试设置3个节点为宜。
样条回归很多种,我们主要讲限制性立方样条回归。
model.spline
summary(model.spline)#查看模型概况
样条回归模型的残差标准误为139.6,调整R2为0.6872。比线性回归和曲线回归好,但不如分段回归。
#样条回归拟合效果
ggplot(urinetest, aes(dosage, urine) ) +
geom_point() +
stat_smooth(method = lm, formula = y ~ rcs(x, c(20,30,35)) )
六、Lowess函数建立局部加权回归
以上介绍的模型都是参数模型,选择什么样的曲线,设置多少个拐点,这些步骤都需要进行尝试,但也会容易出现过拟合现象。于是有学者提出了Lowess非参数回归,它没有回归系数可估计,只是在寻找一条拟合效果相对更好的曲线。
model.lowess
summary(model.lowess)#查看概况
#查看拟合
ggplot(urinetest, aes(dosage, urine)) +
geom_point() +
stat_smooth()
局部加权给一般只做数据探索,stat_smooth()就是默认用lowess画拟合图
七、广义可加模型
和lowess函数一样,广义可加模型也无法给出明确的系数,但它的适用范围更广,可以执行因变量与多个自变量之间的各种非参数拟合。
它可以是任意的单变量函数的叠加,这些函数既可以是线性,也可以是非线性。它的因变量可以服从二项分布、Poisson分布、Gamma分布等更广义的范畴。它的任务就是根据目前的数据,找出一条最贴合的曲线。
model.gam
summary(model.gam)#查看模型概况
广义可加模型的调整R2为0.837,但没有给出残差标准误的结果,所以我们需要利用模型生成预测值,用预测值和真实值进行比较,得出残差标准误为98.5,是上述众多模型中表现最优秀的。
pr.gam
#计算RSME和R方
data.frame(RMSE = RMSE(pr.gam, urinetest$urine),
R2 = R2(pr.gam, urinetest$urine))
#查看模型拟合情况
ggplot(urinetest, aes(dosage, urine) ) +
geom_point() +
stat_smooth(method = gam, formula = y ~ s(x))
从图形可以看出,广义可加模型的曲线拟合效果非常好。虽然模型在本数据集中表现良好,但仍需要注意过拟合的情况。
八、总结
各个模型的拟合指标比较
通过比较模型指标,虽然广义可加模型表现较好,可是它并不能提供系数,无法解释变量之间的内在联系。而结合了专业背景而建立的分段回归模型表现相对更为优异。
分段回归的结果汇总如下:
为方便临床应用,我们将剂量节点取整,分别为A=24和C=30,分段回归方程的书写格式为:
Y=β0+β1X1+β2(X1-A)X2+β3(X1-C)X3
(1)当X1≤A时,即X≤24时,X2=0,X3=0,
Y=β0+β1X1=2168.470-0.692*X
(2)当A<X1≤C,即24<X≤30时,X2=1,X3=0,
Y=β0+β1X1+β2(X1-A)X2=2168.470-0.692*X+92.703*(X-24)=-56.402+92.011*X
(3)当X1>C,即X>30时,X2=1,X3=1,
Y=β0+β1X1+β2(X1-A)X2+β3(X1-C)X3
=2168.470-0.692*X+92.703*(X-24)-96.839*(X-30)=2848.768-4.828*X
关注医咖会,及时获取最新统计教程
点击左下角“”,查看全部免费统计教程。或者使用电脑打开网址:http://www.mediecogroup.com/,分类查看全部统计教程。
快加小咖个人微信(xys2019ykh),拉你进统计讨论群和众多热爱研究的小伙伴们一起交流学习。
-
C#微软培训教材(高清PDF)
2009-07-30 08:51:1718.2 在 C #代码中调用 C++和 VB 编写的组件 .240 18.3 版 本 控 制 .249 18.4 代 码 优 化 .252 18.5 小 结 .254 第五部分 附 录 .255 附录 A 关 键 字.255 附录 B 错 误 码.256 附录 C .Net 名字空间... -
C#微软培训资料
2014-01-22 14:10:1718.2 在 C #代码中调用 C++和 VB 编写的组件 .240 18.3 版 本 控 制 .249 18.4 代 码 优 化 .252 18.5 小 结 .254 第五部分 附 录 .255 附录 A 关 键 字.255 附录 B 错 误 码.256 附录 C .Net 名字空间... -
精通sql结构化查询语句
2012-11-03 17:35:29第1章 SQL语言的概述 1.1 认识SQL语言 1.1.1 什么是SQL语言 1.1.2 SQL的历史与发展 1.1.3 SQL的功能和优点 1.2 认识数据库 1.2.1 什么是数据库 1.2.2 数据库系统的结构 1.2.3 数据库系统的工作流程 1.2.4 常见的SQL... -
MATLAB混合编程与工程应用.pdf
2010-05-19 10:32:481.8 常见的混合编程方法简介29 第2 章 MATLAB 混合编程中的数据交流33 2.1 文件的打开和关闭34 2.1.1 文件的打开34 2.1.2 文件的关闭35 2.2 文本数据35 2.2.1 从文本文件中读取数据36 2.2.2 存写ASCII 码数据42 2.3 ... -
MySQL 5.1参考手册.chm
2011-12-07 13:53:3711.7. 使用来自其他数据库引擎的列类型 12. 函数和操作符 12.1. 操作符 12.1.1. 操作符优先级 12.1.2. 圆括号 12.1.3. 比较函数和操作符 12.1.4. 逻辑操作符 12.2. 控制流程函数 12.3. 字符串函数 12.3.1. 字符串... -
MySQL5.1参考手册官方简体中文版
2013-05-10 14:22:1411.7. 使用来自其他数据库引擎的列类型 12. 函数和操作符 12.1. 操作符 12.1.1. 操作符优先级 12.1.2. 圆括号 12.1.3. 比较函数和操作符 12.1.4. 逻辑操作符 12.2. 控制流程函数 12.3. 字符串函数 12.3.1. 字符串... -
-
MySQL 5.1参考手册
2010-04-20 22:02:5011.7. 使用来自其他数据库引擎的列类型 12. 函数和操作符 12.1. 操作符 12.1.1. 操作符优先级 12.1.2. 圆括号 12.1.3. 比较函数和操作符 12.1.4. 逻辑操作符 12.2. 控制流程函数 12.3. 字符串函数 12.3.1. 字符串... -
Visual C++ 2005入门经典--源代码及课后练习答案
2013-02-02 16:42:042.6 变量类型和类型强制转换 67 2.6.1 对操作数进行类型强制转换的规则 68 2.6.2 赋值语句中的类型强制转换 69 2.6.3 显式类型强制转换 69 2.6.4 老式的类型强制转换 70 2.6.5 按位运算符 71 2.7 了解... -
asp.net知识库
2015-06-18 08:45:45常见的 ASP.NET 2.0 转换问题和解决方案 Asp.Net2.0无刷新客户端回调 体验.net 2.0 的优雅(1) -- 异步WebService调用 ASP.NET 2.0页面框架的几点新功能 ASP.NET 2.0 中收集的小功能点 asp.net2.0中的webpart使用... -
Visual Basic 2008程序设计完全自学教程 2/2
2012-03-01 07:18:19包括键盘及鼠标事件、常见的窗体对象、菜单与工具栏设计、绘图入门与应用、程序的调试和异常处理以及文件系统操作等:第18章为数据库编程基础篇,介绍了 ADO.NET技术以及如何利用ADO.NET进行数据库连接等。... -
Visual Basic 2008程序设计完全自学教程 1/2
2012-03-01 07:02:01包括键盘及鼠标事件、常见的窗体对象、菜单与工具栏设计、绘图入门与应用、程序的调试和异常处理以及文件系统操作等:第18章为数据库编程基础篇,介绍了 ADO.NET技术以及如何利用ADO.NET进行数据库连接等。... -
中文版SQL Server2000开发与管理应用实例>>随书源码
2009-02-19 22:23:46│ │ 3.6.4 动态他Transact-SQL语句处理中的常见问题演示.sql │ │ 3.7.3 text与ntext字段的复制和合并处理示例.sql │ │ 3.7.4 text与image字段转换处理示例.sql │ │ 3.7.5 ntext字段的REPLACE处理示例.sql │... -
MySql官方参考手册 5.1 中文版
2013-10-16 13:47:3111.7. 使用来自其他数据库引擎的列类型 12. 函数和操作符 12.1. 操作符 12.1.1. 操作符优先级 12.1.2. 圆括号 12.1.3. 比较函数和操作符 12.1.4. 逻辑操作符 12.2. 控制流程函数 12.3. 字符串函数 12.3.1. 字符串... -
MYSQL中文手册
2013-03-11 21:21:3411.7. 使用来自其他数据库引擎的列类型 12. 函数和操作符 12.1. 操作符 12.1.1. 操作符优先级 12.1.2. 圆括号 12.1.3. 比较函数和操作符 12.1.4. 逻辑操作符 12.2. 控制流程函数 12.3. 字符串函数 12.3.1. ... -
Visual Basic开发实战1200例(第2卷)(完整版).(清华出版.孙秀梅.巩建华).part1
2016-06-15 00:31:36实例133 带有子查询的DELETE语句 235 实例134 删除表中多余的重复行数据 235 实例135 对数据库数据进行局部删除 236 3.24 视图 237 实例136 动态创建视图 237 实例137 通过视图更改数据 238 实例138 删除视图 ... -
Visual Basic开发实战1200例(第2卷)(完整版).(清华出版.孙秀梅.巩建华).part2
2016-06-15 00:34:01实例133 带有子查询的DELETE语句 235 实例134 删除表中多余的重复行数据 235 实例135 对数据库数据进行局部删除 236 3.24 视图 237 实例136 动态创建视图 237 实例137 通过视图更改数据 238 实例138 删除视图 ... -
MySQL 5.1参考手册 (中文版)
2011-07-20 16:49:5511.7. 使用来自其他数据库引擎的列类型 12. 函数和操作符 12.1. 操作符 12.1.1. 操作符优先级 12.1.2. 圆括号 12.1.3. 比较函数和操作符 12.1.4. 逻辑操作符 12.2. 控制流程函数 12.3. 字符串函数 12.3.1. 字符串... -
MySQL 5.1参考手册中文版
2010-04-28 14:11:5411.7. 使用来自其他数据库引擎的列类型 12. 函数和操作符 12.1. 操作符 12.1.1. 操作符优先级 12.1.2. 圆括号 12.1.3. 比较函数和操作符 12.1.4. 逻辑操作符 12.2. 控制流程函数 12.3. 字符串函数 12.3.1. ... -
mysql官方中文参考手册
2009-04-11 11:59:1811.7. 使用来自其他数据库引擎的列类型 12. 函数和操作符 12.1. 操作符 12.1.1. 操作符优先级 12.1.2. 圆括号 12.1.3. 比较函数和操作符 12.1.4. 逻辑操作符 12.2. 控制流程函数 12.3. 字符串函数 12.3.1. 字符串... -
LINQ 实战 6/11
2012-03-31 17:10:046.4 操作有层级关系的对象 171 6.5 数据加载的时机以及为何要关心这些 174 6.5.1 延迟加载 174 6.5.2 立即加载详细信息 175 6.6 更新数据 177 6.7 小结 179 第7章 揭开LINQ to SQL的本质 180 7.1 ... -
LINQ 实战 11/11
2012-03-31 17:19:106.4 操作有层级关系的对象 171 6.5 数据加载的时机以及为何要关心这些 174 6.5.1 延迟加载 174 6.5.2 立即加载详细信息 175 6.6 更新数据 177 6.7 小结 179 第7章 揭开LINQ to SQL的本质 180 7.1 ... -
LINQ 实战 10/11
2012-03-31 17:17:326.4 操作有层级关系的对象 171 6.5 数据加载的时机以及为何要关心这些 174 6.5.1 延迟加载 174 6.5.2 立即加载详细信息 175 6.6 更新数据 177 6.7 小结 179 第7章 揭开LINQ to SQL的本质 180 7.1 ... -
LINQ 实战 9/11
2012-03-31 17:15:456.4 操作有层级关系的对象 171 6.5 数据加载的时机以及为何要关心这些 174 6.5.1 延迟加载 174 6.5.2 立即加载详细信息 175 6.6 更新数据 177 6.7 小结 179 第7章 揭开LINQ to SQL的本质 180 7.1 ...