【发布时间】:2011-08-27 11:12:37
【问题描述】:
我有一个大约 20,000 行的数据集,我使用以下代码将其转换为 IEnumerable<Dictionary<string, object>>:
IEnumerable<Dictionary<string, object>> IEnu = ds.Tables[0]
.AsEnumerable()
.Select(r => ds.Tables[0]
.Columns.Cast<DataColumn>().Select(c => new {
Column = c.ColumnName,
Value = r[c]
}).ToDictionary(
i => i.Column,
i => i.Value != DBNull.Value ? i.Value : null
)
);
但IENU 对象大小太大(大约 7 到 8 MB)。这是通过服务传递的非常大的尺寸。另一种选择是生成数据集的 XML(大约 1 到 2 MB),但仍然存在一个问题,即我无法识别 XML 节点数据的数据类型,我也没有创建任何包含 XML 节点属性的类并创建一个列表,因为我的选择查询是基于标准的,所以在传入 sql 后在客户端生成
那么我怎样才能在 XML 中传递数据类型,或者有没有其他方法可以将数据从 WCF 服务传递到 Silverlight 应用程序?
【问题讨论】:
-
简单:不要一次传回 20'000 行!如果您以可管理的块回传数据,例如一次 100 行,您的大小将降至 40K ......
-
我想说的另一点:你不应该创建一个带有“匿名”对象的字典——那样的话,你永远不会知道你在处理什么。创建一个自定义类,例如
Customer或Person或任何你正在处理的东西,然后创建一个IEnumerable<Customer>或IEnumerable<Person>- 这样,你会得到一个已知对象类的列表 - 你 知道你在处理什么。 -
也许看看 OData?这是当您在 Google 搜索“从 WCF 到 Silverlight 的数据”时出现的第一件事。 MSDN - msdn.microsoft.com/en-us/library/cc838234(v=vs.95).aspx OData 网站 - odata.org/developers/protocols
标签: c# .net wcf silverlight silverlight-4.0