Select方法的灵活使用
普通用户可以忽略本节内容。
DataTable的Select是一个非常重要的方法,灵活使用,可以轻松解决很多看似复杂的难题。
示例一
下面的示例可以参考CaseStudy目录下的文件:
成绩排名.Table
例如在一个成绩表中,包括班级、姓名、总分、总分排名几列数据,希望按班级自动生成总分排名:
'获得所有班级名称,保存在集合中
Dim bjs
As List(Of
String)
= DataTables("成绩表").GetValues("班级")
For Each
bj
As
String
In bjs
'获得该班级的全部行,按总分降序排序
Dim
drs
As List(Of
DataRow)
= DataTables("成绩表").Select("[班级]
= "
&
bj,
"总分
DESC")
For
n As
integer
= 0
To
drs.Count -
1
'遍历所有行
If
n > 0
AndAlso
drs(n)("总分")
= drs(n-1)("总分")
Then
'如果总分和上一行相同
drs(n)("总分排名")
= drs(n-1)("总分排名")
'则排名等于上一行
Else
drs(n)("总分排名")
= n + 1
'设置排名
End
If
Next
Next
示例二
下面的示例可以参考CaseStudy目录下的文件:
等级划分.Table
假定有一个表,有分数和等级两列,要根据分数从高到低进行等级划分,其中A等占10%,B等占25%,C等占40%,D等占20%,E等占5%。
代码为:
Dim
vals() As
Double = {0.1,0.35,0.75,0.95}
Dim
cnt As
Integer = DataTables("表A").DataRows.Count
'得到总行数
Dim
drs As
List (of
DataRow) =
DataTables("表A").Select("",
"分数 Desc")
'得到按分数高低排列的行的集合.
For
i As
Integer = 0
To drs.Count
- 1
Dim v
As Double =
i /cnt
'计算
位置比例
If v >
vals(3)
Then
drs(i)("等级")
= "E"
ElseIf v
> vals(2)
Then
drs(i)("等级")
= "D"
ElseIf v
> vals(1)
Then
drs(i)("等级")
= "C"
ElseIf v
> vals(0)
Then
drs(i)("等级")
= "B"
Else
drs(i)("等级")
= "A"
End
If
Next