如何修复错误&;No property or field 'Color'存在类型'String&

本文关键字:Color 存在 String field 类型 property 何修复 错误 No or | 更新日期: 2023-09-27 18:04:15

使用动态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());
            }
     }

主要焦点是每个部分。其他一切似乎都很好。但当我有另一个有值的下拉菜单时,我得到一个错误。"类型'String'中不存在'Color'属性或字段",并且Color可以用任何组合框名称替换。

所以在上面的例子中,如果ComboBox cbColor有文本White,我在ComboBox 'cbType'上执行下拉,上面的代码将变得与:

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

和我得到错误"没有属性或字段'Color'存在类型'String "

如何修复错误&;No property or field 'Color'存在类型'String&

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