我有一个查询扩展器,它有一个我想用来对我的数据源进行一些过滤的 CustomExpression。
这是在 DynamicData 网站上,所以我不知道编译时的对象类型(当前实体)。假设我在编译时知道对象类型,那么我可以这样做:
protected void GameFiltering(object sender, CustomExpressionEventArgs e)
{
e.Query = e.Query.Cast<Resource>().Where(x => x.GameId == GameId);
}
我可以从 e.Query.ElementType
得到我需要的类型。现在我只是将 ElementType 作为通用参数发送到 Cast 方法,然后调用 linq 方法 Where。
我假设每个 Type 都有一个 GameId 属性,我想根据该属性进行过滤。
MethodInfo method = e.Query.GetType().GetMethod("Cast").MakeGenericMethod(new Type[] { e.Query.ElementType });
var castedQuery = method.Invoke(e.Query, null);
这就是我用反射调用 cast 方法的方式,但我不知道如何在结果对象上调用 linq 方法。
最佳答案
如果您假设所有项目都具有该属性,则无需强制转换它们。
protected void GameFiltering(object sender, CustomExpressionEventArgs e)
{
e.Query = e.Query.Where(obj => (int)obj.GetType().GetProperty("GameId").GetValue(obj, null) == GameId)
}
关于c# - 通过反射使用泛型类型调用的方法上的动态 Linq,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32307784/