2016-10-25 21 views
0

私はWCFサービスを開発しています。このサービスでは、各インデックスの配列を返す必要があります。しかし、私は1つのインデックスが1つまたは複数のデータを持つ場合があります(このケースでは多い場合があります)。私は私が辞書のC#重複キー

public class Indicador 
{ 
    [DataMember] 
    public string indicador_nombre { get; set; } 
    [DataMember] 
    public string indicador_codigo { get; set; } 
    [DataMember] 
    public string indicador_tipo { get; set; } 
    [DataMember] 
    public string indicador_descripcion { get; set; } 
    [DataMember] 
    public Dictionary<string, List<Celda>> celdas { get; set; } 
} 

この指標はstringCeldasのリストが含まれている辞書を持っているクラス・インジケータを持って

説明します。

public class Celda 
{ 
    [DataMember] 
    public int celda_id { get; set; } 
    [DataMember] 
    public string celda_codigo_empresa { get; set; } 
    [DataMember] 
    public string celda_modulo_codigo { get; set; } 
    [DataMember] 
    public int celda_orden { get; set; } 
    [DataMember] 
    public string celda_categoria_nombre { get; set; } 
    [DataMember] 
    public string celda_categoria_codigo { get; set; } 
    [DataMember] 
    public List<CeldaKeyVal> valores_celdas { get; set; } 
} 

Celdaはまた、例えば、私は以下の持っている、今CeldaKeyVal

public class CeldaKeyVal 
{ 
    [DataMember] 
    public string celda_key_codigo { get; set; } 
    [DataMember] 
    public string celda_key_valor { get; set; } 
} 

のリストを持っている:私はkey I002、2 Celdasを実現する必要がある場合

{ 
    "GetCheckInResult": { 
    "indicadores": [ 
     { 
     "celdas": [ 
      { 
      "Key": "I001", 
      "Value": [ 
       { 
       "celda_categoria_codigo": "C01", 
       "celda_categoria_nombre": "Cecina", 
       "celda_codigo_empresa": "E0001", 
       "celda_id": 1, 
       "celda_modulo_codigo": "M01", 
       "celda_orden": 1, 
       "valores_celdas": [ 
        { 
        "celda_key_codigo": "CODIGO", 
        "celda_key_valor": "CHECK1" 
        }, 
        { 
        "celda_key_codigo": "IMAGEN", 
        "celda_key_valor": "L76nD.jpg" 
        }, 
        { 
        "celda_key_codigo": "SUBTEXTO", 
        "celda_key_valor": "prueba subtexto 1" 
        }, 
        { 
        "celda_key_codigo": "TEXTO", 
        "celda_key_valor": "Prueba dominio 1" 
        } 
       ] 
       } 
      ] 
      } 
     ], 
     "indicador_codigo": "I001", 
     "indicador_descripcion": "Foto SKU + Descrip.SKU + EAN13 + Sí/No", 
     "indicador_nombre": "Presencia", 
     "indicador_tipo": "T01" 
     }, 
     { 
     "celdas": [ 
      { 
      "Key": "I002", 
      "Value": [ 
       { 
       "celda_categoria_codigo": "C02", 
       "celda_categoria_nombre": "Cerdo", 
       "celda_codigo_empresa": "E0001", 
       "celda_id": 4, 
       "celda_modulo_codigo": "M01", 
       "celda_orden": 1, 
       "valores_celdas": [ 
        { 
        "celda_key_codigo": "CODIGO", 
        "celda_key_valor": "codigo" 
        } 
       ] 
       } 
      ] 
      } 
     ], 
     "indicador_codigo": "I002", 
     "indicador_descripcion": "Descrip. + Cantidad", 
     "indicador_nombre": "Precio", 
     "indicador_tipo": "T03" 
     }, 
     { 
     "celdas": [ 
      { 
      "Key": "I002", 
      "Value": [ 
       { 
       "celda_categoria_codigo": "C01", 
       "celda_categoria_nombre": "Cecina", 
       "celda_codigo_empresa": "E0001", 
       "celda_id": 5, 
       "celda_modulo_codigo": "M01", 
       "celda_orden": 4, 
       "valores_celdas": [ 
        { 
        "celda_key_codigo": "CODIGO", 
        "celda_key_valor": "ssddsds" 
        } 
       ] 
       } 
      ] 
      } 
     ], 
     "indicador_codigo": "I002", 
     "indicador_descripcion": "Descrip. + Cantidad", 
     "indicador_nombre": "Precio", 
     "indicador_tipo": "T03" 
     }, 
     { 
     "celdas": [ 
      { 
      "Key": "I003", 
      "Value": [ 
       { 
       "celda_categoria_codigo": "C01", 
       "celda_categoria_nombre": "Cecina", 
       "celda_codigo_empresa": "E0001", 
       "celda_id": 3, 
       "celda_modulo_codigo": "M01", 
       "celda_orden": 6, 
       "valores_celdas": [ 
        { 
        "celda_key_codigo": "CODIGO", 
        "celda_key_valor": "sdadsa" 
        }, 
        { 
        "celda_key_codigo": "IMAGEN", 
        "celda_key_valor": "L76nD.jpg" 
        }, 
        { 
        "celda_key_codigo": "TEXTO", 
        "celda_key_valor": "Texto 1" 
        } 
       ] 
       } 
      ] 
      } 
     ], 
     "indicador_codigo": "I003", 
     "indicador_descripcion": "Foto + Sí/No", 
     "indicador_nombre": "Actividades Claves", 
     "indicador_tipo": "T02" 
     } 
    ], 
    "status": 1 
    } 
} 

...それから私は2つのCeldasが同じkeyにあり、別々ではないことを望みます。

最初は私のSPのクエリ結果の各反復について辞書を初期化していました。失敗し、停止するような配置を表示します。私のために私の外で、すなわち一度初期化すると、複数の結果が生成され、それが間違っていれば生成されます。できるだけ具体的になるようにしてください。質問があればコメントしてください!

+0

ディクショナリを読み込むコードはどうなっていますか? – radarbob

答えて

0

多くの検索の後、エラーが完全に自分のコードに含まれていることがわかりました。本当に残念です...誰かがあなたにサービスを提供すれば、コードソリューションを残します!

public ListaCeldas GetCheckList(int gsalid) 
    { 
     SqlConnection conn = new SqlConnection(Db); 
     List<Celda> celdas = new List<Celda>(); 
     ListaCeldas lista_celdas = new ListaCeldas(); 
     try 
     { 

      SqlCommand cmd = new SqlCommand("MBL_SEL_CELDAS", conn); 
      cmd.CommandType = CommandType.StoredProcedure; 
      cmd.Parameters.AddWithValue("gsalid", gsalid); 
      conn.Open(); 
      cmd.ExecuteNonQuery(); 
      DataTable dtCelda = new DataTable(); 
      dtCelda.Load(cmd.ExecuteReader()); 

      foreach (DataRow dr in dtCelda.Rows) 
      { 
       Celda celda = new Celda(); 
       celda.celda_id = Convert.ToInt32(dr["CeldaId"]); 
       celda.celda_codigo_empresa = Convert.ToString(dr["CeldaEmpresaCodigo"]); 
       celda.celda_modulo_codigo = Convert.ToString(dr["CeldaModuloCodigo"]); 
       celda.celda_orden = Convert.ToInt32(dr["CeldaOrden"]); 
       celda.celda_categoria_nombre = Convert.ToString(dr["CeldaCategoriaNombre"]); 
       celda.celda_categoria_codigo = Convert.ToString(dr["CeldaCategoriaCodigo"]); 
       celda.indicador_nombre = Convert.ToString(dr["CeldaIndicadorNombre"]); 
       celda.indicador_codigo = Convert.ToString(dr["CeldaIndicadorCodigo"]); 
       celda.indicador_tipo = Convert.ToString(dr["CeldaIndicadorTipoCodigo"]); 
       celda.indicador_descripcion = Convert.ToString(dr["CeldaIndicadorDescripcion"]); 
       DataTable dtCeldasKey = new DataTable(); 
       SqlCommand cmd_celdas_key = Helper.GetCeldaValoresKey(celda.celda_id); 
       dtCeldasKey.Load(cmd_celdas_key.ExecuteReader()); 
       List<CeldaKeyVal> listaCeldaKey = new List<CeldaKeyVal>(); 
       foreach (DataRow drCeldasKey in dtCeldasKey.Rows) 
       { 
        CeldaKeyVal celda_key_val = new CeldaKeyVal(); 
        celda_key_val.celda_key_codigo = Convert.ToString(drCeldasKey["CeldaKeyCodigo"]); 
        celda_key_val.celda_key_valor = Convert.ToString(drCeldasKey["CeldaKeyValue"]); 
        listaCeldaKey.Add(celda_key_val); 
       } 
       celda.valores_celdas = listaCeldaKey; 
       celdas.Add(celda); 
       var groupByIndicador = (from celdasClass in celdas 
             group celdasClass by celdasClass.indicador_codigo 
              into groupIndicador 
              select groupIndicador).ToDictionary(cgd => cgd.Key, cgd => cgd.ToList()); 
       lista_celdas.status = 1; 
       lista_celdas.indicadores = groupByIndicador; 
      } 
     } 
     catch (Exception e) 
     { 
      lista_celdas.status = 0; 
     } 
     return lista_celdas; 
    } 
関連する問題