Azure Tableストレージの文字列フィールドをDatetimeフィールドに変換します

StackOverflow https://stackoverflow.com/questions/4634576

  •  08-10-2019
  •  | 
  •  

質問

Azureテーブルには、日付時間を文字列形式で保持するフィールドがあります。これをDateTimeフィールドに置き換え、文字列列の値を変換したいと思います。これにアプローチする最良の方法は何ですか?

SQLでは、新しい列を作成して更新ステートメントを実行することでこれを行います...

役に立ちましたか?

解決

私はこれを自分で試したことはありませんが、ここに /仕事がすべきステップがあります。これは、C#/vb/etcスクリプトである必要があります。

  1. クラスの定義を変更して、タイプDateTimeのA / new /メンバーを含みます。
  2. LINQクエリを実行してテーブルからすべての行をロードし、古い文字列変数に基づいて新しいDateTime変数を入力するループを実行します。
  3. オブジェクトをテーブルに保存します。 //テーブルストレージには、その変数の新しい定義と古い定義のオブジェクトが含まれています
  4. クラスの定義から古いフィールドを削除します
  5. テーブルからオブジェクトをもう一度ロードし、汚れている以外に何でもして保存します。これ /は、テーブル内のシリアル化された構造から古いメンバーを取り除く必要があります。ここで、新しいDateTimeフィールドに元の文字列変数の名前を取得したい場合は、手順1から5を再び行います。今回は、データをあるフィールドから別のフィールドに移動します。唯一の違いは、再度変換を行う必要がないことです。

一般に、これは完全なPITAであり、オブジェクトデータベースとストレージサービスの禁止の1つです。

他のヒント

Azure Table Storageクライアントは、DateTimeをネイティブに理解している(DateTimeOffsetではない)ため、SDKに問題の世話をさせるだけで検討することをお勧めします。

それ以外の場合は、文字列としてデータタイムを表現する最良の方法は、「u」形式を使用して書かれ、解析されたUTC値としてそれらを明示的に保存および取得することです。

var dateAsString = myDateTime.ToString("u");

うまくいくかどうかはわかりませんが、「至福の無知」を試すことができます。

実際のテーブルストアは、実際にエンティティの形状を気にしません(開発ファブリックは異なる場合があります)。エンティティプロパティをDateTimeに変更しますが、セッターテストでは、値はDTに値を解析しない場合でも、DateTimeです。何かのようなもの

private DateTime myDT
public DateTime MyDT
{
    get
    {
        return myDT;
    }
    set
    {
       DateTime = null;
       if(value is DateTime)
       {
           myDT = value;
       }
       else
       {
           myDT = DateTime.Parse(value);
       }
    }

}

時間が経つにつれて、または明示的にバッチで明示的に、エンティティを単にロードして再度保存すると、すべてがDateTimeに設定されます。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top