【发布时间】:2011-08-02 22:30:40
【问题描述】:
我将数据从 SQL Server 数据库抓取到 DataTable 中,我使用 AsEnumerable 将其转换,然后使用一系列 Linq 语句进行分离。我的最终目标是获取那些 Linq 查询并让它为我生成一个 HashTable。所以代替匿名类型:
var facebookPosts
= from f in results.AsEnumerable()
where f.GetInt("SocialMediaTypeID").Equals(
(int) SocialMediaRecordType.FacebookPost)
select new {
Headline = f.GetString("Headline"),
Parameters = new Parameters(f.GetString("Parameters")),
SocialMediaUserID = f.GetLong("SocialMediaUserID"),
SocialMediaRecordID = f.GetLong("SocialMediaRecordID"),
GravityScore = f.GetFloat("GravityScore"),
NewsDate = f.GetDateTime("NewsDate", false),
Template = "Facebook"
};
我可以这样做:
var facebookPosts1
= from f in results.AsEnumerable()
where f.GetInt("SocialMediaTypeID").Equals(
(int) SocialMediaRecordType.FacebookPost)
select new Hashtable {
{ "Headline", f.GetString("Headline"),
"SocialMediaUserID", f.GetLong("SocialMediaUserID"),
etc... }
};
.NET 4.0 可以做到这一点吗?
编辑:为了澄清这个问题,我最终要做的是将 JSON 返回到浏览器。我的公司创建了一个派生自 HashTable 的 JsonObject 类,这就是我最终返回 Json 所必须使用的。我想要做的是在 results 中的每行创建一个 Hashtable(或 JsonObject),使用上面的示例,它有一个名为 Headline 的键,其值为 f.GetString("Headline"),另一个名为 SocialMediaUserID 的键,其值为 f.GetLong("SocialMediaUserID") 等等。 Facebookposts 最终将是一个 HashTable 或 JsonObject 的数组或 IEnumerable,每个都有几个键/值对。如果我不能这样做,我想我无法将 facebookPosts 操作到我需要的正确 JsonObject 结构中?我确实需要明确指定名称。
【问题讨论】:
-
您为什么要寻找哈希表而不是字典?您是否仍打算显式指定名称,还是希望它遍历所有字段本身?如果是后者,它怎么知道使用哪个“getter”?您是在寻找每行 一个哈希表(所以是
IEnumerable<HashTable>)还是一个整体?基本上,请澄清问题:) -
@Rob:您的公司会不允许您使用 JSON.NET 之类的库自动将对象转换为 JSON 字符串吗?
-
@StriplingWarrior:不,因为他们已经有了自己的滚动。与此同时,由于时间关系,我求助于 Reflection 来提取信息并将其 Json 化。