我正在尝试使用反射通过实体框架进行动态选择。
这个想法是,该方法将获取列名称、要搜索的每列的值以及每列的顺序作为参数。
例如:
public anEntity list(String ColumnName, String Value, String Order)
{
//
//...
items = (from r in context.Products
where r.GetType().GetProperty(ColumnName). Contains(Value)))
select r).OrderBy(Order).ToList();
returns Items
}
是否可以?你可以帮帮我吗?
我也有同样的事情!花了3个小时找到了解决方案!
Expression.Lambda 和运行时的查询生成,最简单的“Where”示例
与 EF、Expression> 和 LinqKit 配合使用效果非常好。
更改代码以使用动态类型:
private Expression<Func<Goods, bool>> LambdaConstructor (string propertyName, string inputText, Condition condition)
{
var item = Expression.Parameter(typeof(Goods), "item");
var prop = Expression.Property(item, propertyName);
var propertyInfo = typeof(Goods).GetProperty(propertyName);
var value = Expression.Constant(Convert.ChangeType(inputText, propertyInfo.PropertyType));
BinaryExpression equal;
switch (condition)
{
case Condition.eq:
equal = Expression.Equal(prop, value);
break;
case Condition.gt:
equal = Expression.GreaterThan(prop, value);
break;
case Condition.gte:
equal = Expression.GreaterThanOrEqual(prop, value);
break;
case Condition.lt:
equal = Expression.LessThan(prop, value);
break;
case Condition.lte:
equal = Expression.LessThanOrEqual(prop, value);
break;
default:
equal = Expression.Equal(prop, value);
break;
}
var lambda = Expression.Lambda<Func<Goods, bool>>(equal, item);
return lambda;
}
对于 OrderBy 使用:无法使用 LINQ OrderBy 中的属性名称进行排序
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)