none
LINQ to SQLにおいて 動的にフィールドにアクセスするには RRS feed

  • 質問

  • SqlDataReaderを利用しているときには

     

     

     

    string Tm_command;
    SqlConnection Sql_Cn = new SqlConnection();
    SqlCommand Sql_Cmd = Sql_Cn.CreateCommand();
    SqlDataReader Sql_Dr = null;

    Tm_command = "SQL文";

     

    Sql_Cn.Open();
    Sql_Cmd.CommandText = Tm_command;
    Sql_Dr = Sql_Cmd.ExecuteReader();

    String aaa = Sql_Dr["フィールド名称"].ToString();   <------フィールド名称を文字列で動的にアクセス

     

     

    LINQ to SQLで同じようにフィールド名称を文字列で動的にアクセスするにはどのような方法があるでしょうか?

    初歩的な事と思いますがご指導お願いします。

     

    2008年4月23日 0:38

回答

すべての返信

  • LINQ to SQLクラスを生成した時点で各フィールドはクラスのプロパティになっています。
    このプロパティをうまく使えませんか?

     

    どのように文字列が関係してくるのかがわかりませんが、最悪、文字列を見て対応するプロパティの値を取り出すというコーディングを行えばよいかと思います。

     

    そういうことじゃないのかな?

    2008年4月23日 2:09
  • 匿名型のプロパティなので、リフレクションを使うぐらいじゃないかと思います。

    (他の方法があるかどうかはわかりません)

    2008年4月23日 2:47
    モデレータ
  • ああ、どんなLINQのコードを書いているのか、と、なぜ文字列ベースでデータを取り出したいのか、と書いてもらったほうが解決の早道になるかもしれない。。。

    2008年4月23日 3:27
  • 説明不足で申し訳ございません。

     

    書いているコードは下のような単純なコードです。

          var db = new DataClasses1DataContext(ConnectionString);
          db.Log = Console.Out;
        
          var q = from s in db.T_BANK
                  where s.G_S_NAME.Contains("平成支店")
                  select s;

          foreach (var s in q)
          {

           //これ以下の部分---------------------------------------------
            a[0] = s.Field1;

            a[1] = s.Field2;

            a[2] = s.Field3;

            a[3] = s.Field4;

            a[4] = s.Field5;

            a[5] = s.Field6;

           /------------------------------------------
          }

     

    SqlDataReaderを利用しているときには

    以下のようにループして取得しておりました。

          for (int i = 0; i <= 5; i++)
          {

        a[ i ] = Sql_Dr["Field" + i.ToString()].ToString();   

          }

     


    テーブルのフィールド名称を連続しているような名称で定義している場合に

    コーディングが楽でしたので文字列で動的にアクセスしたいと思いました。

    連続しているフィールドが多いほど思います。

     

    本当に説明が下手ですけど伝わりましたでしょうか?

    リフレクションは使用したことが有りませんので調べようと思います。


     

     

    2008年4月23日 4:49
  • リフレクションを使用する事で実現できました。

    ご指導ありがとうござました。

    2008年4月24日 0:10