读书人

求救:linq查询有关问题

发布时间: 2012-01-26 19:40:46 作者: rapoo

求救:linq查询问题
数据存储在xml文件中
xml格式:
<dataset>
<table>
<编号>0001</编号>
<姓名>暗暗</姓名>
<性别>男</性别>
<医生>甲</医生>
<项目>CT</项目>
<疗程>11/44</疗程>
<检查费>33.99</检查费>
<中药费>99.88</中药费>
</table>
<table>
<编号>0001</编号>
<姓名>暗暗</姓名>
<性别>男</性别>
<医生>甲</医生>
<项目>CT</项目>
<疗程>12/44</疗程>
<检查费>33.99</检查费>
<中药费>99.88</中药费>
</table>
<table>
<编号>0002</编号>
<姓名>暗暗阿</姓名>
<性别>男</性别>
<医生>乙</医生>
<项目>X光</项目>
<疗程>0/0</疗程>
<检查费>33.99</检查费>
<中药费>99.88</中药费>
</table>
<table>
<编号>0002</编号>
<姓名>暗暗阿</姓名>
<性别>男</性别>
<医生>乙</医生>
<项目>X光</项目>
<疗程>0/0</疗程>
<检查费>33.99</检查费>
<中药费>99.88</中药费>
</table>
</dataset>

注:当疗程不为0/0时显示最后一次

查询条件:1、根据编号对检查费、中药费求和

结果:编号 姓名 性别 医生 疗程 检查费 中药费 项目
001 暗暗 男 甲 12/44 67.98 199.76 CT
002 暗暗阿 男 乙 0/0 67.98 199.76 X光

2、根据医生姓名统计

结果:医生 检查费 中药费 病人人数 CT X光
甲 67.98 199.76 1 267.74 0
乙 67.98 199.76 1 0 267.74

3、根据收费类别统计

结果:收费类别 总计 人数 CT X光
检查费 135.96 2 67.98 67.98
中药费 399.52 2 199.76 199.76

4、根据项目统计

结果:项目 人数 检查费 中药费
CT 1 67.98 199.76
X光 1 67.98 199.76

快疯了,哪位大大帮帮忙,谢谢!!!!!!

[解决办法]
你可以不用linq ,首先把xml文件的数据读取到临时表里面,然后操作临时表就可以实现了,datatable有一个select的方法
[解决办法]

VB.NET code
        Dim dt1 As New DataTable        ' 编号        Dim id As DataColumn = New DataColumn()        id.DataType = System.Type.GetType("System.String")        id.ColumnName = "编号"        dt1.Columns.Add(id)        ' 姓名        Dim name As DataColumn = New DataColumn()        name.DataType = System.Type.GetType("System.String")        name.ColumnName = "姓名"        dt1.Columns.Add(name)        ' 性别        Dim sex As DataColumn = New DataColumn()        sex.DataType = System.Type.GetType("System.String")        sex.ColumnName = "性别"        dt1.Columns.Add(sex)        ' 医生        Dim doctor As DataColumn = New DataColumn()        doctor.DataType = System.Type.GetType("System.String")        doctor.ColumnName = "医生"        dt1.Columns.Add(doctor)        ' 项目        Dim project As DataColumn = New DataColumn()        project.DataType = System.Type.GetType("System.String")        project.ColumnName = "项目"        dt1.Columns.Add(project)        ' 疗程        Dim time As DataColumn = New DataColumn()        time.DataType = System.Type.GetType("System.String")        time.ColumnName = "疗程"        dt1.Columns.Add(time)        ' 检查费        Dim examineMoney As DataColumn = New DataColumn()        examineMoney.DataType = System.Type.GetType("System.Double")        examineMoney.ColumnName = "检查费"        dt1.Columns.Add(examineMoney)        ' 中药费        Dim midMoney As DataColumn = New DataColumn()        midMoney.DataType = System.Type.GetType("System.Double")        midMoney.ColumnName = "中药费"        dt1.Columns.Add(midMoney)        Dim ds As New DataSet        ds.ReadXml(New System.Xml.XmlTextReader("C:\Documents and Settings\0122bl\デスクトップ\test.xml"))        For i As Integer = 0 To ds.Tables(0).Rows.Count - 1            dt1.Rows.Add(ds.Tables(0).Rows(i).ItemArray)        Next        '查询条件:1、根据编号对检查费、中药费求和         Dim query = From data In dt1.AsEnumerable() _                Group data By id1 = data.Field(Of String)(dt1.Columns(0).ColumnName) _                Into g = Group _        Select New With _        { _            .Jianchafei = g.Sum(Function(order) order.Field(Of Double)(dt1.Columns(6).ColumnName)), _            .zhongyaofei = g.Sum(Function(order) order.Field(Of Double)(dt1.Columns(7).ColumnName)) _        } 

读书人网 >.NET

热点推荐