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

Adding support for appending a dictionary/expando to DynamicParameters.

parent 63062d96
......@@ -1963,16 +1963,14 @@ class ParamInfo
/// construct a dynamic parameter bag
/// </summary>
public DynamicParameters() { }
/// <summary>
/// construct a dynamic parameter bag
/// </summary>
/// <param name="template">can be an anonymous type of a DynamicParameters bag</param>
public DynamicParameters(object template)
{
if (template != null)
{
AddDynamicParams(template);
}
AddDynamicParams(template);
}
/// <summary>
......@@ -1988,16 +1986,29 @@ dynamic param
#endif
)
{
object obj = param as object;
var obj = param as object;
if (obj != null)
{
var subDynamic = obj as DynamicParameters;
if (subDynamic == null)
{
templates = templates ?? new List<object>();
templates.Add(obj);
var dictionary = obj as IEnumerable<KeyValuePair<string, object>>;
if (dictionary == null)
{
templates = templates ?? new List<object>();
templates.Add(obj);
}
else
{
foreach (var kvp in dictionary)
{
#if CSHARP30
Add(kvp.Key, kvp.Value, null, null, null);
#else
Add(kvp.Key, kvp.Value);
#endif
}
}
}
else
{
......
......@@ -778,7 +778,7 @@ public void TestEnumStrings()
connection.Query<TestEnumClass>("select 'bla' as [EnumEnum]").First().EnumEnum.IsEqualTo(TestEnum.Bla);
}
public void TestSupportForParamDictionary()
public void TestSupportForDynamicParameters()
{
var p = new DynamicParameters();
p.Add("name", "bob");
......@@ -789,7 +789,6 @@ public void TestSupportForParamDictionary()
p.Get<int>("age").IsEqualTo(11);
}
public void TestProcSupport()
{
var p = new DynamicParameters();
......@@ -1250,6 +1249,36 @@ public void TestAppendingAnonClasses()
((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()
{
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