2016-12-26 20 views
0

私は事前定義データベースを使ってレストサービスを構築しようとしています。問題はIdClienteがint型であり、文字列のリストを返すことです。ここで 行をintから文字列に変換する

は私が

public List<Cliente> ListarClientes() 
{ 
    try 
    { 
     var dt = (new DAL.DbHelper()).GetResultSet("SELECT idCliente, nomeUtilizador, password, tipoUtilizador, ativo FROM Cliente"); 
     var qCli = from dr in dt.AsEnumerable() 
        select new Cliente 
        { 
         (string)IdCliente = dr["idCliente"] 
        }; 
    } 
    catch (Exception) 
    { 
     throw; 
    } 
    finally 
    { 

    } 
} 

IdClienteがIntで構築しようとしていると私はこれを行うには無残失敗していたコードです。問題は、DBがデータで満たされているので、もう一度やり直すのが問題になることです。何か助けてください?

編集:

私はこれを試してみましたが、私はエラー

public List<Cliente> ListarClientes() 
{ 
    try 
    { 
     var dt = (new DAL.DbHelper()).GetResultSet("SELECT idCliente, nomeUtilizador, password, tipoUtilizador, ativo FROM Cliente"); 
     var qCli = from dr in dt.AsEnumerable() 
        select new Cliente 
        { 
         IdCliente = Convert.ToInt32(dr["idCliente"]), 
         NomeUtilizador = dr["nomeUtilizador"].ToString(), 
         Password = dr["password"].ToString(), 
         TipoUtilizador = Convert.ToInt32(dr["tipoUtilizador"]), 
         Ativo = Convert.ToBoolean(dr["ativo"]) 
        }; 
     IdCliente.ToString(); 
     Ativo.ToString(); 
    } 

を取得していない。しかし、これは正しいのですか?

私の元のデータが

public class Cliente 
    { 
     int idCliente; 
     string nomeUtilizador; 
     string password; 
     int tipoUtilizador; 
     bool ativo; 

     [DataMember(Order = 0)] 
     public int IdCliente 
     { 
      get { return idCliente ; } 
      set { idCliente = value; } 
     } 

     [DataMember(Order = 1)] 
     public string NomeUtilizador 
     { 
      get { return nomeUtilizador; } 
      set { nomeUtilizador = value; } 
     } 

     [DataMember(Order = 2)] 
     public string Password 
     { 
      get { return password; } 
      set { password = value; } 
     } 

     [DataMember(Order = 3)] 
     public int TipoUtilizador 
     { 
      get { return tipoUtilizador; } 
      set { tipoUtilizador = value; } 
     } 

     [DataMember(Order = 4)] 
     public bool Ativo 
     { 
      get { return ativo; } 
      set { ativo = value; } 
     } 
    } 
} 
+0

あなたのコードはリストを返している、いないリスト:何を返すようにしたいですか? –

答えて

3

あなたは文字列に変換するのInt32を前に、あなたはのInt32に値を変換することができ、

string IdCliente = Convert.ToInt32(dr["idCliente"]).ToString(); 

...か、直接文字列に値を変換するには、toString()メソッドを使用することができます。

IdCliente = dr["idCliente"].ToString(); 

あなたははしかし、文字列に値をキャストすることはできません。

+0

私は編集することができませんでしたが、それは唯一の私はエラーがないが、私はそれが正しい方法であるかわからない。 –

+0

正しい方法は何ですか?前述したように、文字列以外の値を文字列にキャストすることはできませんが、ToString()メソッドを使用して任意の値をStringに変換することができます。 – mm8

1

この試してみてください:あなたの最後の編集に基づいて

select new Cliente 
{ 
    IdCliente = (string)dr["idCliente"]; 
}; 
+0

私はまだCS0029 C#を暗黙のうちにタイプ '文字列'を 'int'エラーに変換できません。 –

+0

私は自分の答えを編集しました。もし 'dr [" idCliente "]'がすでに文字列であれば、その方法で代入することができます –

+0

私の編集が正しいかどうか教えてください。 –

0

を、私はあなたが整数型に文字列から「変換」を探していると思います。

このような変換は「解析」メソッドによって行われます。 DR [「idCliente」]は内部の整数値を持つ文字列であることが保証された場合にのみ動作します

select new Cliente 
{ 
    IdCliente = int.Parse(dr["idCliente"]); 
}; 

:あなたのような何かをするだろう。

EDIT:

[OK]を、私はあなたのメソッドの戻り値をシリアル化しようとしていると思います。メソッドシグネチャを使用して文字列のリストを返すことはできません(クライアントのリスト(public List<Cliente>)を返し、Clienteクラスはintとブール値を内部に持ちます)

シリアル化したい場合は、あなたが望む出力形式(JSON、XML)を教えてください。キーx値形式でデータを返そうとしているだけで、値が文字列の場合は、Clienteクラスを変更してプロパティをキャストする必要がありますあなたの文字列に変数(またはあなたが文字列にすべてを変更することができます)。

+0

My IdClienteは整数で、クライアントから文字列のリストを返すために文字列に変換したいと思います。私はオリジナルのClienteクラスで編集しました –

+0

私は自分の答えを編集しました。 –

0

問題は、int型プロパティ(public int IdCliente)に文字列を設定しようとしている、である。 本当に文字列に変換してオブジェクトリストとして返す必要がある場合は、DTOを作成することをお勧めします。 例:

public class ClienteDTO 
{ 
    string idCliente; 

    public string IdCliente { get; set; } 
} 

、その後

select new ClienteDTO 
{ 
    IdCliente = dr["idCliente"] 
}; 
関連する問題