0

使用 Dapper DynamicParameters 构造函数,有没有办法排除某些参数被包含在内。例如,假设我有以下实体,

public class EntityA
{
    public string Method1 { get; set; }
    public string Method2 { get; set; }
    public string Method3 { get; set; }
}

我正在调用一个只有 Method1 和 Method2 作为参数的存储过程,我可以让 DynamicParameters 方法只传递这两个参数并跳过第三个参数吗?对于我的实际示例,我的实体有更多属性,并且宁愿使用排除方案而不是手动指定参数。

4

2 回答 2

1

这里最简单的选项是匿名投影——这可以针对参数对象本身进行,DynamicParameters如果您需要添加其他自定义参数,也可以针对参数进行;例如:

conn.Execute(sql, new { obj.Foo, obj.Bar });

或者:

var args = new DynamicParameters(new { obj.Foo, obj.Bar });
// not shown: add some more custom parameters
conn.Execute(sql, args);
于 2013-07-05T07:23:05.673 回答
0

您可以使用如下扩展方法来生成动态参数。在像我这样的情况下,我有大量参数,它可以节省一点时间。

public static class ParameterExtensions
{
    public static DynamicParameters ConvertToDynamicParameters<T>(this T incoming)
    {
      DynamicParameters dynamicParameters = new DynamicParameters();
      foreach (PropertyInfo property in incoming.GetType().GetProperties())
      {
        object value = GetPropValue(incoming, property.Name);
        if (value != null) dynamicParameters.Add(property.Name, value);
      }
      return dynamicParameters;
    }

    private static object GetPropValue(object src, string propName)
    {
      return src.GetType().GetProperty(propName)?.GetValue(src, null);
    }
}
于 2016-10-11T14:54:03.450 回答