![](/img/trans.png)
[英]Convert type in Expression<Func<T1, bool>> to Expression<Func<T2, bool>> (LINQ to SQL)
[英]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.