![](/img/trans.png)
[英]Converting Expression<Func<DTO,bool>> to Expression<Func<Domain, bool>>
[英]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.