如何修复错误"没有属性或字段'颜色'存在于类型' String'"

时间:2014-05-19 14:26:21

标签: c# linq entity-framework combobox dynamic-linq

使用Dynamic Linq和实体框架工作我有以下代码:

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

主要焦点是foreach部分。其他一切似乎都很好。但是当我有另一个有值的下拉列表时,我会收到错误。 “类型'String'中不存在属性或字段'Color',并且Color可以替换为任何ComboBox名称。

因此,在上面的示例中,如果ComboBox cbColor具有文本White并且我在ComboBox'cbType'上执行下拉列表,则上述代码将变为:

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

我收到错误“没有属性或字段'颜色'存在于'String'”

类型中

1 个答案:

答案 0 :(得分:0)

您正在按错误的顺序执行这些步骤。查询的每个部分都按照应用的顺序完成。首先,您将其缩小到字符串列表,然后将where过滤器应用于字符串列表,应用select last而不是first。