gpt4 book ai didi

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

转载 作者:太空宇宙 更新时间:2023-11-03 13:00:58 24 4
gpt4 key购买 nike

我有一个查询扩展器,它有一个我想用来对我的数据源进行一些过滤的 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/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com