动态生成泛型表达式时出错

本文关键字:出错 表达式 泛型 动态 | 更新日期: 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);