我正在从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的东西。我想要做的是在结果中每行创建一个Hashtable(或JsonObject),使用上面的例子,它具有一个名为 Headline 的键,其值为< em> f.GetString(“标题”),另一个名为 SocialMediaUserID 的键,其值为 f.GetLong(“SocialMediaUserID”),依此类推。 Facebookposts最终将是一个数组或IEnumerable的HashTable或JsonObject,每个都有几个键/值对。如果我不能这样做,我想我会把 facebookPosts 操纵到我需要的正确的JsonObject结构中吗?我确实需要明确指定名称。
答案 0 :(得分:2)
我对Hashtable
类知之甚少,因为Dictionary
是.NET的标准哈希表实现。像这样的东西?
...
select new Dictionary<string, object>
{
{"Headline", f.GetString("Headline")},
{"SocialMediaUserID", f.GetLong("SocialMediaUserID")},
// etc..
};
或者,如果您碰巧有权访问System.Web
,
using System.Web.Routing;
facebookPosts1 = facebookPosts.Select(p => new RouteValueDictionary(p)).ToList();
答案 1 :(得分:0)
您尝试做的事情不适合.NET泛型,因为您尝试读取的字段并不总是相同类型。泛型的典型用法类似于Dictionary<string, string>
,其中键和值的类型都是事先已知的。你还需要它嵌套更深层次;如果你让你的例子工作,它将返回一个IEnumerable<Hashtable>
,这似乎不适合使用。
听起来你真正想要的是一个成熟的ORM,它将返回一个强类型类的集合。使用实体框架,它将处理为您创建集合,而无需执行您在此处尝试的操作。