¿Cómo soluciono el error "No existe ninguna propiedad o campo 'Color' en el tipo 'Cadena'"

Usando Dynamic Linq y el marco de trabajo de la entidad, tengo el siguiente código:

private void ComboBox_DropDown(object sender, EventArgs e)
    {
        ComboBox cb1 = (ComboBox)sender;

        string SelectField = cb1.Name.Substring(2);

        var query = MyContext.Items.Select(SelectField);

        foreach (ComboBox cb2 in gbFilters.Controls.OfType<ComboBox>().Where(com => com.Text != ""))
        {
            string propertyName = cb2.Name.Substring(2);
            string propertyValue = cb2.Text;

            query = query.Where(propertyName + "=@0", propertyValue);
        }

        var x = query;

            x = x.Provider.CreateQuery(
                    Expression.Call(
                        typeof(Queryable), "Distinct",
                        new Type[] { x.ElementType },
                        x.Expression));

            foreach (var y in x)
            {
                if (y != null)
                    cb1.Items.Add(y.ToString());
            }
     }

El enfoque principal es la porción foreach. Todo lo demás parece estar funcionando bien. Pero cuando tengo otro menú desplegable que tiene un valor, aparece un error. "No existe ninguna propiedad o campo 'Color' en el tipo 'Cadena'" y Color se puede reemplazar con cualquier nombre de ComboBox.

Entonces, en el ejemplo anterior, si ComboBox cbColor tiene el texto White y realizo un menú desplegable en ComboBox 'cbType', el código anterior sería el mismo que:

       var query = MyContext.Items.Select("Type");
       query = query.Where("Color=@0", "White");

y aparece el error "No existe ninguna propiedad o campo 'Color' en el tipo 'Cadena'"

preguntado el 19 de mayo de 14 a las 15:05

1 Respuestas

Estás haciendo los pasos en el orden incorrecto. Cada parte de la consulta se realiza en el orden aplicado. Primero, lo reduce a su lista de cadenas, luego aplica los filtros where a la lista de cadenas, aplica su selección al final en lugar de primero.

contestado el 19 de mayo de 14 a las 19:05

¡Do! Gracias bastante simple! - user2125348

No es la respuesta que estás buscando? Examinar otras preguntas etiquetadas or haz tu propia pregunta.