private string FormatStringEnumerable(object value, string name, Type type)
{
if (value != null)
{
var array = ((IEnumerable)value).Cast<object>().ToArray();
if (array.Length > 0)
return FormatStringValues(name, type, array);
}
if (value != null)
type = value.GetType();
var elementType = type.IsArray
? type.GetElementType()
: type.IsGenericType
? type.GetGenericArguments()[0]
: null;
if (elementType == null)
throw new NotSupportedException("Unknown source type: " + type.FullName);
if (NpgsqlTypes.TypeConverter.CanConvert(elementType))
return
"(SELECT * FROM unnest(array[]::{1}[]) AS \"{0}\") AS \"{0}\"".With(
name,
NpgsqlTypes.TypeConverter.GetTypeName(elementType));
return "(SELECT * FROM {1} LIMIT 0) AS \"{0}\"".With(name, FromSqlSource("sq", elementType));
}