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

问题描述 投票:0回答:2

我正在使用 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()
asp.net web-services soap
2个回答
1
投票

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

DatatableA.Merge(DatatableB)

所以现在 DatatableA 也包含 DatatableB 的所有列和行。 如果列名相同且数据类型相同,则 2 列变为 1。

所以我确保数据类型是相同的,如果不是我转换它们,然后将DatatableB中的列名称重命名为DatatableA中的列名称。

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

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

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

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

然后我创建了一个循环来遍历包含我想要转换的数据的列的数据表行

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

希望这对某人有帮助


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()
© www.soinside.com 2019 - 2024. All rights reserved.