使用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'”
类型中答案 0 :(得分:0)
您正在按错误的顺序执行这些步骤。查询的每个部分都按照应用的顺序完成。首先,您将其缩小到字符串列表,然后将where过滤器应用于字符串列表,应用select last而不是first。