簡體   English   中英

可以從 Dapper DynamicParameters 獲取 DbType 嗎?

[英]Can a get DbType from Dapper DynamicParameters?

我需要遍歷 Dapper DynamicParameters 因此,我檢查答案以獲取參數值。

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

現在,我需要參數 DbType。 是否有可能獲得這些信息?

我不知道 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);  
     }
}

你可以這樣做! 請檢查以下代碼:

 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是你的對象

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM