实体框架 C# 中的反射

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)

是否可以?你可以帮帮我吗?

Ale*_*sev 8

我也有同样的事情!花了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 中使用属性名称进行排序