繁体   English   中英

如何转换 Linq 表达式<func<object,object,bool> &gt; 表达<func<t1,t2,bool> &gt; </func<t1,t2,bool></func<object,object,bool>

[英]How to convert Linq Expression<Func<object,object,bool>> to Expression<Func<T1,T2,bool>>

我正在尝试将 ORM 的所有关联/连接存储在列表中

public class OrmJoin{
  public Type Type1 { get; set;}
  public Type Type2 { get; set;}
  public bool IsRequired { get; set;}
  public Expression<Func<object, object, bool>> Predicate { get; set;}
}

然后我可以循环遍历此列表并将 Predicate 属性转换为Expression<Func<T1,T2,bool>>通过使用typeof(Type1)typeof(Type2)以某种方式将前 2 个对象表达式参数转换为类型化参数吗?

以下是您的操作方法:

public class OrmJoin
{
    // ...

    public Expression AsTyped()
    {
        var parameters = new[] { Type1, Type2 }
            .Select(Expression.Parameter)
            .ToArray();
        var castedParameters = parameters
            .Select(x => Expression.Convert(x, typeof(object)))
            .ToArray();
        var invocation = Expression.Invoke(Predicate, castedParameters);

        return Expression.Lambda(invocation, parameters);
    }
    public Expression<Func<T1, T2, bool>> AsTyped<T1, T2>() => (Expression<Func<T1, T2, bool>>)AsTyped();
}

void Main()
{
    var test = new OrmJoin { Type1 = typeof(string), Type2 = typeof(int), Predicate = (a,b) => Test(a,b) };
    var compiled = test.AsTyped<string, int>().Compile();

    Console.WriteLine(compiled.Invoke("asd", 312));
}
bool Test(object a, object b)
{
    Console.WriteLine(a);
    Console.WriteLine(b);
    return true;
}

暂无
暂无

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

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