Skip to content

Commit a12c37a

Browse files
authored
Merge pull request #1598 from DarkWanderer/feature/support-returning-arrays
2 parents f13b1e6 + 55b1023 commit a12c37a

File tree

2 files changed

+20
-1
lines changed

2 files changed

+20
-1
lines changed

Dapper/SqlMapper.cs

Lines changed: 9 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1251,6 +1251,14 @@ private static T GetValue<T>(IDataReader reader, Type effectiveType, object val)
12511251
{
12521252
return default;
12531253
}
1254+
else if (val is Array array && typeof(T).IsArray)
1255+
{
1256+
var elementType = typeof(T).GetElementType();
1257+
var result = Array.CreateInstance(elementType, array.Length);
1258+
for (int i = 0; i < array.Length; i++)
1259+
result.SetValue(Convert.ChangeType(array.GetValue(i), elementType, CultureInfo.InvariantCulture), i);
1260+
return (T)(object)result;
1261+
}
12541262
else
12551263
{
12561264
try
@@ -1802,7 +1810,7 @@ private static Func<IDataReader, object> GetDeserializer(Type type, IDataReader
18021810
return GetDapperRowDeserializer(reader, startBound, length, returnNullIfFirstMissing);
18031811
}
18041812
Type underlyingType = null;
1805-
if (!(typeMap.ContainsKey(type) || type.IsEnum || type.FullName == LinqBinary
1813+
if (!(typeMap.ContainsKey(type) || type.IsEnum || type.IsArray || type.FullName == LinqBinary
18061814
|| (type.IsValueType && (underlyingType = Nullable.GetUnderlyingType(type)) != null && underlyingType.IsEnum)))
18071815
{
18081816
if (typeHandlers.TryGetValue(type, out ITypeHandler handler))

tests/Dapper.Tests/Providers/PostgresqlTests.cs

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -77,6 +77,17 @@ public void TestPostgresqlChar()
7777
}
7878
}
7979

80+
[FactPostgresql]
81+
public void TestPostgresqlSelectArray()
82+
{
83+
using (var conn = GetOpenNpgsqlConnection())
84+
{
85+
var r = conn.Query<int[]>("select array[1,2,3]").ToList();
86+
Assert.Single(r);
87+
Assert.Equal(new[] { 1, 2, 3 }, r.Single());
88+
}
89+
}
90+
8091
[AttributeUsage(AttributeTargets.Method, AllowMultiple = false)]
8192
public class FactPostgresqlAttribute : FactAttribute
8293
{

0 commit comments

Comments
 (0)