我需要遍历Dapper DynamicParameters
。所以,我检查this回答以获取参数值。
foreach (var paramName in parameters.ParameterNames)
{
var value = ((SqlMapper.IParameterLookup)parameters)[paramName];
}
现在,我需要参数DbType。是否有可能获得此信息?
答案 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
是您的对象