Commit 081799e6 authored by Brannon Jones's avatar Brannon Jones

Adding support for appending a dictionary/expando to DynamicParameters.

parent 63062d96
...@@ -1963,17 +1963,15 @@ class ParamInfo ...@@ -1963,17 +1963,15 @@ class ParamInfo
/// construct a dynamic parameter bag /// construct a dynamic parameter bag
/// </summary> /// </summary>
public DynamicParameters() { } public DynamicParameters() { }
/// <summary> /// <summary>
/// construct a dynamic parameter bag /// construct a dynamic parameter bag
/// </summary> /// </summary>
/// <param name="template">can be an anonymous type of a DynamicParameters bag</param> /// <param name="template">can be an anonymous type of a DynamicParameters bag</param>
public DynamicParameters(object template) public DynamicParameters(object template)
{
if (template != null)
{ {
AddDynamicParams(template); AddDynamicParams(template);
} }
}
/// <summary> /// <summary>
/// Append a whole object full of params to the dynamic /// Append a whole object full of params to the dynamic
...@@ -1988,18 +1986,31 @@ dynamic param ...@@ -1988,18 +1986,31 @@ dynamic param
#endif #endif
) )
{ {
object obj = param as object; var obj = param as object;
if (obj != null) if (obj != null)
{ {
var subDynamic = obj as DynamicParameters; var subDynamic = obj as DynamicParameters;
if (subDynamic == null) if (subDynamic == null)
{
var dictionary = obj as IEnumerable<KeyValuePair<string, object>>;
if (dictionary == null)
{ {
templates = templates ?? new List<object>(); templates = templates ?? new List<object>();
templates.Add(obj); templates.Add(obj);
} }
else else
{
foreach (var kvp in dictionary)
{
#if CSHARP30
Add(kvp.Key, kvp.Value, null, null, null);
#else
Add(kvp.Key, kvp.Value);
#endif
}
}
}
else
{ {
if (subDynamic.parameters != null) if (subDynamic.parameters != null)
{ {
......
...@@ -778,7 +778,7 @@ public void TestEnumStrings() ...@@ -778,7 +778,7 @@ public void TestEnumStrings()
connection.Query<TestEnumClass>("select 'bla' as [EnumEnum]").First().EnumEnum.IsEqualTo(TestEnum.Bla); connection.Query<TestEnumClass>("select 'bla' as [EnumEnum]").First().EnumEnum.IsEqualTo(TestEnum.Bla);
} }
public void TestSupportForParamDictionary() public void TestSupportForDynamicParameters()
{ {
var p = new DynamicParameters(); var p = new DynamicParameters();
p.Add("name", "bob"); p.Add("name", "bob");
...@@ -789,7 +789,6 @@ public void TestSupportForParamDictionary() ...@@ -789,7 +789,6 @@ public void TestSupportForParamDictionary()
p.Get<int>("age").IsEqualTo(11); p.Get<int>("age").IsEqualTo(11);
} }
public void TestProcSupport() public void TestProcSupport()
{ {
var p = new DynamicParameters(); var p = new DynamicParameters();
...@@ -1250,6 +1249,36 @@ public void TestAppendingAnonClasses() ...@@ -1250,6 +1249,36 @@ public void TestAppendingAnonClasses()
((int)result.d).IsEqualTo(4); ((int)result.d).IsEqualTo(4);
} }
public void TestAppendingADictionary()
{
var dictionary = new Dictionary<string, object>();
dictionary.Add("A", 1);
dictionary.Add("B", "two");
DynamicParameters p = new DynamicParameters();
p.AddDynamicParams(dictionary);
var result = connection.Query("select @A a, @B b", p).Single();
((int)result.a).IsEqualTo(1);
((string)result.b).IsEqualTo("two");
}
public void TestAppendingAnExpandoObject()
{
dynamic expando = new System.Dynamic.ExpandoObject();
expando.A = 1;
expando.B = "two";
DynamicParameters p = new DynamicParameters();
p.AddDynamicParams(expando);
var result = connection.Query("select @A a, @B b", p).Single();
((int)result.a).IsEqualTo(1);
((string)result.b).IsEqualTo("two");
}
public void TestAppendingAList() public void TestAppendingAList()
{ {
DynamicParameters p = new DynamicParameters(); DynamicParameters p = new DynamicParameters();
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment