2011-08-02 27 views
0

我將數據從SQL Server數據庫抓取到DataTable中,該數據表使用AsEnumerable進行轉換,然後使用一系列Linq語句進行分離。我的最終目標是採取這些Linq查詢,併爲我生成一個HashTable。因此,而不是匿名類型:是否有可能用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的。我想要做的是結果有創造每行一個哈希表(或JSONObject的),使用上面的例子中,一個名爲標題f.GetString(「標題」)值的關鍵,另一個鍵名爲SocialMediaUserID,值爲f.GetLong(「SocialMediaUserID」)等。 Facebookposts最終將成爲HashTable或JsonObject的數組或IEnumerable,每個鍵都有幾個鍵/值對。如果我不能這樣做,我想我被困在做facebookPosts到我需要的適當的JsonObject結構的操縱?我確實需要明確指定名稱。

+2

你爲什麼要尋找一個哈希表而不是字典的任何理由?你還打算明確指定名稱,還是期望它遍歷所有的字段本身?如果是後者,它將如何知道使用哪個「吸氣劑」?你正在尋找一個散列表*每行*(所以'IEnumerable ')或整體?基本上,請澄清問題:) –

+0

@Rob:您的公司是否不允許您使用JSON.NET這樣的庫將對象自動轉換爲JSON字符串? – StriplingWarrior

+0

@StriplingWarrior:不,因爲他們已經有自己的滾動。與此同時,由於時間的原因,我使用了Reflection來提取信息並對其進行分析。 – Rob

回答

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(); 
+0

當我嘗試這樣做時,SocialMediaUserID所在的第二行顯示爲「;預期」。如果我拿出哈希表,所以它只是「選擇新的」,我會得到大量的錯誤。 – Rob

+0

@Rob:也許你應該創建一個從字典中創建一個Hashtable的實用方法?這樣你就可以利用所有的標準.NET東西來創建字典本身,然後將其轉換爲在你公司的JSON轉換器中使用。我假設你的公司不會讓你實際上將字典支持添加到JSON轉換器本身。 – StriplingWarrior

0

什麼你試圖做不符合.NET泛型適合,因爲你想閱讀領域並不總是屬於同一類型。泛型的典型用法類似於Dictionary<string, string>,其中鍵和值的類型都是事先已知的。你還需要它嵌套更深層次;如果你有你的榜樣工作,它將返回一個IEnumerable<Hashtable>,這似乎並不是好工作。

這聽起來像你真正想要的是一個成熟的ORM,它將返回一個強類型類的集合。使用實體框架,它將處理爲您創建集合,而無需執行您在此處嘗試執行的操作。

相關問題