2010-09-14 109 views
0

我有一个WCF Web调用,它返回SQL命令的结果。WCF返回类型

但是,这个SQL命令是动态的,所以我不知道会有多少列和哪些数据类型。

我如何将结果通过WCF传递给Silverlight应用程序?

(顺便说一下我,然后希望能够把这个数据到数据网格)

感谢

+0

使用强类型的东西,比如所谓的POCO(只是普通的对象,映射到数据库) – Andrey 2010-09-14 15:14:14

回答

1
Name Age Height Income 
Adam 50 175  88 
Paul 20 166  75 
Ranj 19 188  69 
Omar 25 200  45 

变为:

Key Attribute Value 
Adam Age   50 
Adam Height  175 
Adam Income  88 
Paul Age   20 
Paul Height  175 
Paul Income  75 

等等

基本上你压扁数据表列的任意数量到数据表仅会3列(或4,如果你想要包含数据类型)。

+0

然后你会怎么把它放到一个datagrid? – 2010-09-15 10:48:09

+0

您可以尝试旋转网格。我相信DevExpress确实是支点。 – 2010-09-16 08:37:48

0

很丑陋,但你可以在DataSet返回结果,或数据集转换为XML字符串(可能用XSLT清理一下)。

然而,WCF的理想之一是强类型接口,包括返回的数据。由于键入较弱,客户需要额外的信息来解释XML。

0

这个在商业世界里一次又一次地出现。

我用过的一个(仇恨复仇)是返回一个DataSet或者列表中的头部信息在第一行的字符串列表。然后将列名映射到属性类型。所有这些都涉及大量的代码和类型转换。

一个更好的选择可能是返回列一个固定的最大数量(不是所有的人总是习惯):

  • 创建列1,列2 ...列的视图作为变量列名(到你最大)
  • 任何常见的固定列(如主键/ ID?)通常加入

那么,你至少可以跨到客户端,静态映射它。如果可能的话,最好避免使用可变布局SQL结果。

祝你好运!

0

对我来说,这样的体系结构是敲击网络服务。你想如何使用未知结构和数据类型的数据?

如果您需要返回通用数据,请使用XElement或XmlElement作为操作的返回类型,并将结果转换为XML(手动,序列化,FOR XML select,...)。