【问题标题】:Merging two list from different WCF ServiceClients which have the same object-type合并来自具有相同对象类型的不同 WCF ServiceClients 的两个列表
【发布时间】:2015-03-17 18:45:29
【问题描述】:

我有一个类库,其中包含一个名为“Club”的类,由两个 WCF 服务使用。它们每个都有一个返回类型相同的方法,一个俱乐部对象列表:List<Club>

当我在网络表单中调用这两种方法时,我会返回两个包含这些俱乐部对象的列表,但是我无法在 Concat 的帮助下合并这些列表,因为一个列表被视为 serviceClient1.List<Club> 而另一个被视为serviceClient2.List 而不仅仅是List<Club>

  var resultService1 = service1Client.GetClubByName(search).ToList();
  var resultService2 = service2Client.GetClubByName(search).ToList();
  var endResult = resultService1.Concat(resultService2);

我尝试使用特定对象类型强制转换和更改 var,但没有结果。我要如何解决它,因为我想在一个网格中显示两种服务的结果。

提前致谢!

【问题讨论】:

  • resultService1.Concat(resultService2).ToList()resultService1.AddRange(resultService2)?
  • Concat 似乎不起作用,因为它不是 IEnumerable 的,并且 AddRange 给出了“不可分配给参数类型”错误。
  • 所以它们其实不是同一种类型?
  • 它们基于相同的类型,但每个服务将它们作为 servicename.List 返回。
  • 您需要俱乐部的所有财产吗?

标签: c# asp.net wcf webforms


【解决方案1】:

一种解决方案是创建一个新的匿名类型,其中包含您需要的属性。

var endResult = resultService1
                  .Select(x => new { x.Prop1, x.Prop2})
                  .Concat(resultService2
                           .Select(x => new { x.Prop1, x.Prop2}));

【讨论】:

    【解决方案2】:

    嗯,它们不一样(命名空间+类名)。而且它们由不同的服务返回的事实也“表明”它们不是“相同的”。即使它们今天具有相同的形状(属性列表),也不能保证它们很快就会改变(您控制服务吗?)。

    话虽如此,您可以通过在客户端创建扩展方法来从一个 Club 类转换为另一个来解决这个问题。或手动转换它们(循环或 linq)。

    【讨论】:

    • 这两个服务都是我的,是的,这些主要用于测试目的,不会用于现实生活中的应用程序。
    • 好的,我明白了。如果你最终遇到这种“问题”,我会选择不同的服务架构,然后是 wcf。在 REST 上下文中,这不是问题。否则我认为 Mangus 方法会奏效 - 除非你需要在组装寄宿生之间传递课程......
    • 我一定会记住这一点,atm 我正在学习 WCF,所以想尝试一下。感谢您的建议!
    猜你喜欢
    • 2018-04-08
    • 1970-01-01
    • 1970-01-01
    • 2019-03-05
    • 2010-11-05
    • 2019-06-09
    • 2021-11-13
    • 1970-01-01
    • 2021-01-21
    相关资源
    最近更新 更多