2011-08-02 2 views
0

私は、SQL ServerデータベースからAsEnumerableを使用して変換し、一連のLinqステートメントを使用して変換するDataTableにデータを取得しています。私の究極の目標は、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で可能ですか?

EDIT:質問を明確にするために、最終的にJSONをブラウザに戻しています。私の会社はHashTableから派生したJsonObjectクラスを作成しました.JsonObjectクラスは最終的にJsonを返すために使用する必要があります。私は何をしたいのですが、上記の例を使用して、持っている結果に行ごとにハッシュテーブル(またはJsonObject)を作成している、f.GetString(「見出し」)の値を持つ見出しという名前のキー、別の鍵SocialMediaUserIDの値がf.GetLong( "SocialMediaUserID")などとなります。 Facebookpostsは、最終的にはそれぞれHashTableまたはJsonObjectの配列またはIEnumerable、いくつかのキーと値のペアになります。私がこのようにすることができない場合、私はfacebookPostsの操作を私が必要とする適切なJsonObject構造に詰め込んでいると思いますか?名前を明示的に指定する必要があります。

+2

辞書ではなくハッシュテーブルを探している理由は何ですか?名前を明示的に指定しようとしているのですか、それともすべてのフィールド自体を繰り返し処理することを期待していますか?それが後者の場合、どの「ゲッター」を使うべきかはどのように分かりますか? 1行につき1つのハッシュテーブル*(つまりIEnumerable )を探していますか?基本的に質問を明確にしてください:) –

+0

@Rob:JSON.NETのようなライブラリを使用してオブジェクトを自動的にJSON文字列に変換することを許可しませんか? – StriplingWarrior

+0

@StriplingWarrior:いいえ、彼らはすでに独自のロールがあります。その間、私は情報を引き出してJsonizeするReflectionに頼った。 – Rob

答えて

2

Dictionaryは、.NET用の標準的なハッシュテーブルの実装であるため、Hashtableクラスについて詳しくはわかりません。このようなもの?

... 
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が2番目の行に "; expected"と表示されます。私がHashtableを取り出して、それがちょうど「新しいものを選択する」のであれば、私は大量のエラーが発生します。 – Rob

+0

@Rob:DictionaryからHashtableを作成するためのユーティリティメソッドを作成する必要がありますか?そうすれば、標準の.NETのすべてのものを活用して辞書自体を作成し、それを会社のJSONコンバータ用に変換することができます。私はあなたの会社が実際にJSONコンバータ自体にディクショナリサポートを追加さ​​せないと仮定しています。 – StriplingWarrior

0

フィールドは、あなたが読みしようとしているので、何をしようとしていることは、.NETのジェネリックと合いません必ずしも同じタイプであるとは限りません。一般的なジェネリックの使用は、Dictionary<string, string>のようなもので、キーと値の両方の型があらかじめわかっています。あなたはまたそれをもっと深く入れ子にする必要があります。あなたの事例があれば、IEnumerable<Hashtable>が返ってきます。これはうまくいくとは思わしくありません。

強く型付けされたクラスのコレクションを返す完全なORMが本当に欲しいと思うように聞こえます。 Entity Frameworkを使用すると、ここでやろうとしている操作をせずにコレクションの作成を処理します。

関連する問題