排序和合并从Web服务返回的数据

时间:2014-12-23 21:16:54

标签: asp.net web-services soap

我正在使用asp.net处理Web服务。 我正在创建一个时间表显示板,就像你在机场,公交车站或火车站看到的那样。 我负责为1站创建服务,还有其他人负责其他站。

我已经创建了我的网络服务,现在我试图消费其他人。 我可以使用它们,但其他人都让他们的网络服务返回不同的值,例如,我返回路线ID,旅程ID,起始位置,结束位置,停靠点,运行天数,时间。但其他人的网络服务可能会返回路线ID,开始,结束,停止,时间,平台,旅程状态等数据。在一个表中,以及与我在另一个Web服务中匹配的其他数据。

那么如何过滤掉我不需要的数据,例如示例中的平台和旅程状态。 此外,我如何将来自网络服务的每个人的数据合并到1个网格视图中,这样我就可以显示通过我的电台的所有列车。

我对网络服务很陌生,但我正在尝试,而且我已经完成了很多工作,我只是坚持这一点。

我希望这不是一个愚蠢的问题

Dim allStations As New List(Of ScheduleEntry)

Dim ws1 As New Hull.ArrivaServices()
For Each u1 As Hull.Result In ws1.ShowRouteByStation("hrw")
    Dim s As New ScheduleEntry
    s.StartTime = u1.Departure
    s.StopTime = u1.Arrival
    allStations.Add(s)
Next

Dim ws2 As New Heathrow.Heathrow_Airport()
For Each u2 As Heathrow.Result In ws2.GetHeathrowTrains
    Dim s As New ScheduleEntry
    s.StartTime = u2.BeginTime
    s.StopTime = u2.EndTime
    allStations.Add(s)
Next

GridView1.DataSource = allStations
GridView1.DataBind()

2 个答案:

答案 0 :(得分:1)

我将数据集转换为数据表,使其相互兼容。

DatatableA.Merge(DatatableB)

所以现在DatatableA还包含所有DatatableB列和行。 如果列名相同且数据类型相同,则2列变为1。 所以我确保数据类型是相同的,如果它们不是我转换它们,然后将DatatableB中的列名重命名为DatatableA中的列名。

DatatableA.Columns(columnnumber).ColumnName = "NewName"

记住计算列号时,从左到右,第一列是0

如果我必须转换数据类型,我在DatatableB中创建了一个新列(与DatatableA中的相应列相同)

DatatableB.Columns.Add("NewColumnName", GetType(DataType))

然后我创建了一个循环来遍历c​​ollumn的数据表行和我想要转换的数据

Dim i as integer
Dim z as integer
i = 0
    z = DatatableB.Rows.Count`

并使用

将新转换的数据放入NewColumn中
Do until i = z
DatatableB.Rows(i)("ColumnName") = "ConvertedData) 
Next

希望这有助于某人

答案 1 :(得分:0)

你的问题不是我们通常所说的排序和合并,而不是真的。最大的问题是你有许多服务都返回类似的数据格式,但不完全相同。所以你的第一步就是让它们完全相同:在你的程序中。

首先,确定要在网格中显示的内容。假设您只想显示开始和停止时间。因此,创建一个可以保持开始和停止时间的课程:

Public Class ScheduleEntry
    Public Property Start As DateTime
    Public Property Stop As DateTime
End Class

您将使用List(Of ScheduleEntry)填充网格。

现在,根据您拨打的服务,只需点击“开始”和“停止”,然后将其添加到列表中即可。假设具有不同返回值的两个服务的情况:

Dim allStations As New List(Of ScheduleEntry)

Dim ws1 As New SERVICE1.CLASS()
For Each u1 As SERVICE1.Result In ws1.METHOD
    Dim s As New ScheduleEntry
    s.StartTime = u1.Departure
    s.StopTime = u1.Arrival
    allStations.Add(s)
Next

Dim ws2 As New SERVICE2.CLASS()
For Each u2 As SERVICE2.Result In ws2.METHOD2
    Dim s As New ScheduleEntry
    s.StartTime = u2.BeginTime
    s.StopTime = u2.EndTime
    allStations.Add(s)
Next

GridView1.DataSource = allStations
GridView1.DataBind()