【问题标题】:Pass Expression instead lambda传递表达式而不是 lambda
【发布时间】:2023-03-15 00:10:01
【问题描述】:

全部! 默认情况下,我将尝试为添加映射 db 列编写扩展。我使用 linq2db

这是我的方法

    public static void EntityWithDefaults<T>(this FluentMappingBuilder fluentMappingBuilder) {
        fluentMappingBuilder.Entity<T>().HasTableName(typeof(T).Name);
        var item = Expression.Parameter(typeof(T), typeof(T).Name);
        foreach (var prop in typeof(T).GetProperties()) {
            if (prop.Name == "ID")
                fluentMappingBuilder.Entity<T>().Property(x => Expression.Property(item, prop.Name)).IsIdentity().IsPrimaryKey();
            else
                fluentMappingBuilder.Entity<T>().Property(x => Expression.Property(item, prop.Name));
        }
    }

它没有用......但如果我这样写 - 一切都好

       fluentMappingBuilder.Entity<AppLogLong>()
       .HasTableName("AppLog")
       .Property(x => x.ID).IsPrimaryKey().IsIdentity()
       .Property(x => x.ActionDate)
       .Property(x => x.ActionId)
       .Property(x => x.EmployeeId)
       .Property(x => x.RequestType);

我认为我的问题是属性的错误表达。请问您能帮帮我吗?

谢谢!

【问题讨论】:

  • it didn't work 是什么意思?你有什么错误吗?你是如何使用扩展方法的?
  • 没有错误。在我的扩展方法执行之后,fluentMappingBuilder 没有任何属性,只有 ID。

标签: c# linq2db


【解决方案1】:

x =&gt; x.IDx =&gt; Expression.Property(item, "ID") 不同。

你想做的大概是:

foreach (var prop in typeof(T).GetProperties()) {
    var parameter = Expression.Parameter(typeof(T), "x");
    var property = Expression.Property(parameter, prop);
    var cast = Expression.Convert(property, typeof(object));
    var lambda = Expression.Lambda<Func<T, object>>(cast, parameter);
    if (prop.Name == "ID")
        fluentMappingBuilder.Entity<T>().Property(lambda).IsIdentity().IsPrimaryKey();
    else
        fluentMappingBuilder.Entity<T>().Property(lambda);
}

也就是说,我们必须自己构造整个LambdaExpression

【讨论】:

  • 这或多或少是答案。这需要在每个属性的 for 循环中完成
  • 谢谢,但我在这里将 Int32 转换为对象时出错 var lambda = Expression.Lambda>(property, parameter);
  • @canton7 无法在此 var lambda = Expression.Lambda>(property , 投掷);演员表带有红色下划线
  • @canton7 非常感谢!我被困在这个愚蠢的事情上))
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-09-14
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多