Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/307.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 可以用Linq查询中的多个键填充哈希表吗?_C#_Linq_Hashtable - Fatal编程技术网

C# 可以用Linq查询中的多个键填充哈希表吗?

C# 可以用Linq查询中的多个键填充哈希表吗?,c#,linq,hashtable,C#,Linq,Hashtable,我将从SQLServer数据库中获取数据,并将其转换为数据表,然后使用一系列Linq语句进行分离。我的最终目标是接受那些Linq查询并让它为我生成一个哈希表。因此,与匿名类型不同: var facebookPosts = from f in results.AsEnumerable() where f.GetInt("SocialMediaTypeID").Equals( (int) SocialMediaRecordType.FacebookPost)

我将从SQLServer数据库中获取数据,并将其转换为数据表,然后使用一系列Linq语句进行分离。我的最终目标是接受那些Linq查询并让它为我生成一个哈希表。因此,与匿名类型不同:

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... }                                    
      };
使用.NET4.0是否可以实现这一点


编辑:为了澄清这个问题,我最终要做的是将JSON返回到浏览器。我的公司创建了一个从哈希表派生的JsonObject类,这就是我最终返回Json所必须使用的。我想做的是在结果中的每行创建一个哈希表(或JsonObject),使用上面的示例,该哈希表具有一个名为Headline的键,其值为f.GetString(“Headline”),另一个键名为SocialMediaUserID,其值为f.GetLong(“SocialMediaUserID”),依此类推。Facebookposts最终将是HashTable或JsonObject的数组或IEnumerable,每个数组或IEnumerable中有几个键/值对。如果我不能这样做,我想我会被困在将facebookPosts操作到我需要的正确JsonObject结构中?我确实需要明确指定名称。

我不太了解
哈希表
类,因为
字典
是.NET的标准哈希表实现。像这样的

...
select new Dictionary<string, object>
                            {
                                {"Headline", f.GetString("Headline")},
                                {"SocialMediaUserID", f.GetLong("SocialMediaUserID")},
                                // etc..
                            };

您尝试执行的操作不适合.NET泛型,因为您尝试读入的字段并不总是相同的类型。泛型的典型用法类似于
字典
,其中键和值的类型都是事先知道的。你还需要它嵌套更深一层;如果您让您的示例工作,它将返回一个
IEnumerable
,这似乎不适合使用


听起来您真正想要的是一个成熟的ORM,它将返回一组强类型类。使用实体框架,它将为您创建集合,而无需执行您在此处尝试执行的操作。

您为什么要查找哈希表而不是字典?您仍然打算显式地指定名称,还是希望它遍历所有字段本身?如果是后者,它如何知道使用哪个“getter”?您是在寻找每行一个哈希表(因此是一个
IEnumerable
)还是一个总哈希表?基本上,请澄清以下问题:)@Rob:您的公司是否允许您使用JSON.NET之类的库自动将对象转换为JSON字符串?@StriplingWarrior:不,因为他们已经有自己的字符串。同时,由于时间的原因,我求助于反射来提取信息并将其Json化。当我尝试这样做时,SocialMediaUserID的第二行写着“预期”。如果我取出哈希表,它只是“选择新”的话,我会有很多错误。@Rob:也许你应该创建一个实用方法,从字典中创建哈希表?这样,您就可以利用所有标准的.NET内容来创建字典本身,然后将其转换为在您公司的JSON转换器中使用。我假设您的公司不允许您向JSON转换器本身添加字典支持。
using System.Web.Routing;

facebookPosts1 = facebookPosts.Select(p => new RouteValueDictionary(p)).ToList();