gpt4 book ai didi

c# - 使用反射将 lambda 表达式作为参数传递

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

我有一个通用的存储库方法调用,如下所示

var result = Repository<MyDbClass>.Get(x => x.MyProperty1 == "Something"
&& (!x.MyProperty2.HasValue || x.MyProperty2 == "SomethingElse"));

我希望用反射来调用这个方法。我主要是在寻找一种使用反射将 lambda 表达式作为参数传递的方法。

编辑

实际上我的存储库类型只会在运行时才知道。所有这些存储库下的表都是相似的,有一些共同的列。正是在这些列上应用了过滤器。所以我不能按原样传递表达式。

public void SomeMethod<T, TR>(T repository, TR dataObject)
{
var type = repository.GetType();
var dataType = dataObject.GetType();
var getMethod = type.GetMethod("Get");
//How to invoke the method by passing the lambda as parameter(??)

}

最佳答案

尝试传递 Func<TR, bool>

var method = typeof(TR).GetMethod("Get");

if (method != null)
{
method.Invoke(new Func<TR, bool>(
(x) => x.MyProperty1 == "Something" /* etc... */));
}

假设您在 Get 中使用 LINQ 方法方法,你可以像这样填写函数

public IEnumerable<TR> Get<TR>(Func<TR, bool> func)
{
return
db.MyDbClassEntities.Where(func);
}

关于c# - 使用反射将 lambda 表达式作为参数传递,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14501163/

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