可以从Dapper DynamicParameters获取DbType吗?

时间:2016-02-03 14:31:37

标签: c# .net-4.5 dapper

我需要遍历Dapper DynamicParameters。所以,我检查this回答以获取参数值。

foreach (var paramName in parameters.ParameterNames)
{
    var value = ((SqlMapper.IParameterLookup)parameters)[paramName];
}

现在,我需要参数DbType。是否有可能获得此信息?

2 个答案:

答案 0 :(得分:0)

我不知道Dapper是否为此提供了更好的解决方案,但是由于反思,没有什么不可能!

var t = parameters.GetType().GetField("parameters", BindingFlags.NonPublic | BindingFlags.Instance);

if (t != null) 
{  
     foreach (DictionaryEntry dictionaryEntry in (IDictionary)t.GetValue(parameters))
     {
        var dbType = (DbType)dictionaryEntry.Value?.GetType().GetProperty("DbType")?.GetValue(dictionaryEntry.Value);  
     }
}

答案 1 :(得分:0)

您可以执行此操作!请检查以下代码:

 private List<DbType> GetParameterType<T>()
    {
        var type = typeof(T);
        var properties = type.GetProperties().Select(property => property.PropertyType.Name).ToList();

        var dbTypes = new List<DbType>();
        foreach (var prop in properties)
        {
            var tryParse = Enum.TryParse<DbType>(prop, out var result);
            if (tryParse)
                dbTypes.Add(result);
        }

        return dbTypes;
    }

然后,其调用很简单:var dbTypes = GetParameterType<T>();,其中T是您的对象