动态生成泛型表达式时出错
本文关键字:出错 表达式 泛型 动态 | 更新日期: 2023-09-27 18:16:41
基于泛型表达式抽象问题,我想使用实体框架6制作一个更通用的方法来使用"UpdateGraph"。
目前,我可以调用SetOwnedCollectionMapping(t => t.ClassProperty)
,但我想通过使用类实例和任何类属性来创建一个更可重用的方法。
下面是我使用的一个例子:
private static void AddOrUpdate<T>(TDataEntity class1, T NavigationProperty) where T : class
{
PropertyInfo pinfo = typeof(TDataEntity).GetProperty("PropertyName");
object value = pinfo.GetValue(class1, null);
ParameterExpression pe = Expression.Parameter(value.GetType(), "L");
var arg = Expression.Constant(null, typeof(TDataEntity));
var body = Expression.PropertyOrField(arg, "PropertyName");
var lambda = Expression.Lambda(body);
SetOwnedCollectionMapping(lambda);
using (var db = new ConsoleContext())//
{
db.UpdateGraph(class1, graphMapping);
db.SaveChanges();
}
}
protected static Expression<Func<IUpdateConfiguration<TDataEntity>, object>> graphMapping { get; set; }
protected void SetOwnedCollectionMapping<T>(Expression<Func<TDataEntity, ICollection<T>>> mapping)
{
Expression<Func<IUpdateConfiguration<TDataEntity>, object>> template =
_ => _.OwnedCollection(mapping);
var map = Expression.Parameter(
typeof(IUpdateConfiguration<TDataEntity>),
"map");
graphMapping = Expression.Lambda<Func<IUpdateConfiguration<TDataEntity>, object>>(
Expression.Call(
((MethodCallExpression)template.Body).Method,
map,
Expression.Quote(mapping)),
map);
}
我的错误是在调用方法SetOwnedCollectionMapping(lambda);
错误1方法的类型参数"ConsoleApplication1.Program.SetOwnedCollectionMapping (System.Linq.Expressions.Expression>>)不能从用法中推断出来。尝试指定类型参数明确。
我对我的lambda表达式有疑问。谁能帮我一下?
看起来在AddOrUpdate
你需要更新下面的行让编译器知道你要传递什么类型
SetOwnedCollectionMapping<T>(lambda);