private string FormatStringValues(string name, Type type, object[] array) { //TODO find best type var firstElem = array.FirstOrDefault(it => it != null); var element = firstElem != null?firstElem.GetType() : type.IsArray ? type.GetElementType() : type.IsGenericType ? type.GetGenericArguments()[0] : null; if (element == null) { throw new ArgumentException("Can't convert collection"); } if (Context.CanUseParams) { var paramFactory = ConverterFactory.GetVarrayParameterFactory(element); if (paramFactory != null) { var pn = Parameters.Add(paramFactory(array)); return("(SELECT * FROM TABLE({0})) \"{1}\"".With(pn, name)); } } var stringFactory = ConverterFactory.GetVarrayStringFactory(element); if (stringFactory == null) { throw new NotSupportedException("Unable to convert collection " + type.FullName); } return("(SELECT * FROM TABLE({0})) \"{1}\"".With(stringFactory(array), name)); }