¿Cómo soluciono el error "No existe ninguna propiedad o campo 'Color' en el tipo 'Cadena'"
Frecuentes
Visto 943 equipos
0
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'"
1 Respuestas
0
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
No es la respuesta que estás buscando? Examinar otras preguntas etiquetadas c# linq entity-framework combobox dynamic-linq or haz tu propia pregunta.
¡Do! Gracias bastante simple! - user2125348