Faa*_*ass 6 c# reflection entity entity-framework
我正在尝试使用反射通过实体框架进行动态选择。
这个想法是,该方法将获取列名称、要搜索的每列的值以及每列的顺序作为参数。
例如:
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
}
Run Code Online (Sandbox Code Playgroud)
是否可以?你可以帮帮我吗?
我也有同样的事情!花了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;
}
Run Code Online (Sandbox Code Playgroud)
对于 OrderBy 使用: 无法在 LINQ OrderBy 中使用属性名称进行排序