2016-12-26 6 views
0

Ich versuche, einen Restdienst mit einer vordefinierten Datenbank zu erstellen, und das Problem ist, dass IdClient ein Int-Typ ist und ich eine Liste der Zeichenfolge zurückgeben möchte. HierKonvertieren von Zeile von Int in Zeichenfolge

ist der Code Ich versuche

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 zu bauen die Int und ich kläglich scheitert dies auf zu tun. Das Problem ist, dass die Datenbank mit Daten gefüllt ist, so dass es ein Problem wäre, alles noch einmal zu tun. Irgendwelche Hilfe bitte?

edit:

habe ich versucht, diese und ich bekomme keine Fehler

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(); 
    } 

Aber ist das richtig?

meiner ursprünglichen Daten

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

Ihr Code zurückgibt eine Liste , keine Liste : Was möchten Sie zurückkommen? –

Antwort

3

Sie könnten den Wert in einen Int32 konvertieren, bevor Sie die Int32 in einen String konvertieren;

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

... oder Sie könnten die ToString() -Methode verwenden, um den Wert in einen String direkt zu konvertieren:

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

Sie können werfen obwohl der Wert in einen String nicht.

+0

könnte nicht verwenden, aber ich bearbeite und es war das einzige war ich habe keine Fehler, aber ich weiß nicht, ob es der richtige Weg ist. –

+0

Was ist nicht der richtige Weg? Wie bereits erwähnt, können Sie keinen String-Wert in eine Zeichenkette * umwandeln, aber Sie können einen beliebigen Wert mit der ToString() -Methode in einen String konvertieren. – mm8

1

Try this:

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

Ich habe immer noch die CS0029 C# Kann nicht implizit Typ 'String' in 'Int' Fehler damit umwandeln. –

+0

Ich habe meine Antwort bearbeitet - Wenn 'dr [" idCliente "]' es ist bereits eine Zeichenfolge, dann können Sie die Aufgabe auf diese Weise zu übertragen –

+0

können Sie mir sagen, ob meine Bearbeitung korrekt ist bitte? –

0

Basierend auf Ihren zuletzt, ich glaube, Sie sind für eine „Umwandlung“ von einem String in einen Integer-Typ suchen.

Konvertierungen wie diese werden durch "Parse" -Methoden durchgeführt. Sie würden so etwas wie:

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

Es funktioniert nur, wenn dr [ „idCliente“] garantiert wird in einem String mit einem ganzzahligen Wert.

EDIT:

Ok, ich glaube, Sie versuchen, die Rückkehr Ihrer Methode zur Serialisierung. Sie werden Ihre Methode Signatur (es gibt eine Liste der Clientes (public List<Cliente>) und Ihre Cliente Klasse ints und ein boolean innen nicht in der Lage sein, eine Liste von String zurück.

Wenn Sie es serialisiert werden wollen, müssen Sie Sagen Sie uns, welches Ausgabeformat Sie haben möchten (JSON, XML). Wenn Sie nur versuchen, Ihre Daten in einem Schlüsselwertformat zurückzugeben, müssen Sie Ihre Cliente-Klasse ändern, damit Ihre Eigenschaften umgewandelt werden Ihre Variablen Zeichenfolge (oder Sie können alles auf Zeichenfolge ändern).

+0

Mein IdCliente ist eine ganze Zahl und ich möchte sie in eine Zeichenkette umwandeln, um eine Liste von Zeichenketten von meinem Client zurückzugeben. Ich habe mit meiner ursprünglichen Cliente-Klasse –

+0

bearbeitet Ich habe eine Bearbeitung zu meiner Antwort gemacht, schau mal rein –

0

Das Problem ist, Sie versuchen, eine Zeichenfolge in eine int Eigenschaft (public int IdCliente) einzustellen. Ich empfehle Ihnen, ein DTO zu erstellen, wenn Sie es wirklich in eine Zeichenfolge konvertieren und als Objektliste zurückgeben müssen. Beispiel:

public class ClienteDTO 
{ 
    string idCliente; 

    public string IdCliente { get; set; } 
} 

und dann

select new ClienteDTO 
{ 
    IdCliente = dr["idCliente"] 
};