繁体   English   中英

将表达式转换为Func <Type, bool> 在c#?

[英]Converting Expression to Func<Type, bool> in c#?

我正在研究服务基础应用程序。 在服务端,我必须将Expression转换为Func<TypeOfEntity,bool>以便在EntityFramework查询中使用。

Type typeofEntity;// we just have type of entity and I could get it from entity name and assembly name
//ExpressionSerializer is in Serialize.Linq
ExpressionSerializer expressionSerializer = new ExpressionSerializer(new JsonSerializer());
Expression expr = expressionSerializer.DeserializeText(stringFromClient);//It's Ok until here
Func<?,bool> func = ?//How can I create Func of typeofEntity and bool
var result = Entities.Something.Where(func);

我们如何将Expression (不是Expression<Func<T,bool>> )转换为Func<T,bool>

您可以使用dynamic类型在运行时解析T 像这样的一个类

static class ExpressionRunner
{
    public static IList<T> Run<T>(
        Context context,
        Expression<Func<T, bool>> expression)
        where T : class
    {
        var result = context
            .Set<T>()
            .Where(expression);

        return result.ToList();
    }

}

可以针对Context运行Expression

Expression expr = expressionSerializer.DeserializeText(stringFromClient);
var result = ExpressionRunner.Run(Entities, expr as dynamic);

请注意,返回类型也是dynamic因此建议在调用链的顶部使用此Run方法以最大化性能 - 即Run应返回void并且所有处理应嵌套在Run

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM