日期:2014-05-20  浏览次数:20948 次

求救: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)) _
        }