/** * keys=key1:1,2,3,4;key2:4,5,6,7 * ... will become: * keys=[ { key1: 1, key2: 4}, { key1: 2, key2: 5 }, { key1: 2, key2: 6 }, { key1: 4, key2: 7 } ] */ private static IEnumerable <Dto> GetKeyFromString(string keys) { var keyValueSet = new Dictionary <string, int[]>(); var count = 0; foreach (var item in keys.Split(new char[] { ';' })) { var keyValue = item.Split(new char[] { ':' }); keyValueSet.Add(keyValue[0], keyValue[1].Split(new char[] { ',' }).Select((it) => Convert.ToInt32(it)).ToArray()); if (count == 0) { count = keyValueSet[keyValue[0]].Length; } else { if (count != keyValueSet[keyValue[0]].Length) { throw new ArgumentException("parametru 'keys' incorect"); } } } var result = new List <Dto>(); for (var i = 0; i < count; i++) { var resultItem = new Dto(); foreach (var keyValue in keyValueSet) { resultItem.Add(keyValue.Key, new JValue(keyValue.Value[i])); } result.Add(resultItem); } return(result); }
public IEnumerable <Dto> ExecuteQuery(string queryText) { var dtos = new List <Dto>(); switch (this.dialect) { case Dialect.SQL2012: case Dialect.SQL2014: // Not developed yet. throw new NotImplementedException(); case Dialect.MYSQL: using (var sqlConnection = new MySqlConnection(this.connectionString)) { MySqlDataReader rdr = null; try { sqlConnection.Open(); var cmd = new MySqlCommand(queryText, sqlConnection); rdr = cmd.ExecuteReader(); while (rdr.Read()) { //var row = Enumerable.Range(0, rdr.FieldCount).ToDictionary(rdr.GetName, rdr.GetValue); //var row = Enumerable.Range(0, rdr.FieldCount).ToDictionary(i => rdr.GetName(i), i => rdr.GetValue(i)); var dto = new Dto(); for (int i = 0; i < rdr.FieldCount; i++) { //var dotNetType = rdr.GetFieldType(i); //var sqlType = rdr.GetDataTypeName(i); //var specificType = rdr.GetProviderSpecificFieldType(i); dto.Add(rdr.GetName(i), new JValue(rdr.GetValue(i))); } dtos.Add(dto); } } finally { if (rdr != null) { rdr.Close(); } if (sqlConnection != null) { sqlConnection.Close(); } } } break; default: break; } return(dtos); }