繁体   English   中英

通过反射使用泛型类型调用的动态 Linq 方法

[英]Dynamic Linq on method called with generic type via reflection

我有一个 Query Extender,它有一个 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。

我会假设每个类型都有一个我想要过滤的 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)
}

暂无
暂无

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

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