//-------------------------------------------------------------------// /// <summary> /// Searches for the longest array in a dictionary. /// </summary> /// <param name="dict">dictionary</param> /// <returns>length of longest array within the dictionary</returns> public static int GetMaxDictSize(QDictionary dict) { var maxLen = -1; foreach (var array in from QDictionary.KeyValuePair kv in dict select kv.Value as Array) { if (array != null) { var type = array.GetType().Name.ToLower(); if (!type.Equals("char[]")) { if (array.GetValue(array.GetLowerBound(0)) is Array) { throw new ConversionException( "Cannot handle nested multidimensional arrays as a dictionary value"); } maxLen = (maxLen < array.Length) ? (array.Length) : maxLen; } else { maxLen = (maxLen < 1) ? 1 : maxLen; } } else { maxLen = (maxLen < 1) ? 1 : maxLen; } } return(maxLen); }
private static void PrintResult(QDictionary d) { foreach (QDictionary.KeyValuePair e in d) { Console.WriteLine(e.Key + "| " + e.Value); } }
static void PrintResult(QDictionary d, Func <string, Task> func) { foreach (QDictionary.KeyValuePair e in d) { Console.WriteLine(e.Key + "| " + e.Value); } }
//-------------------------------------------------------------------// private static object[,] QDict2Excel(QDictionary dict) { try { var len = Utils.GetMaxDictSize(dict); var res = new object[len + 1, dict.Keys.Length]; var keyCounter = 0; foreach (QDictionary.KeyValuePair kv in dict) { var k = Convert2Excel(kv.Key); if (k is Array) { k = (from object x in ((Array)k) where x != null select x).Aggregate("", (current, x) => current + (" " + x)).Trim(); } res[0, keyCounter] = k; //kv.Key.ToString(); var array = kv.Value as Array; var type = kv.Value.GetType().Name.ToLower(); if (array != null && !type.Equals("char[]")) { for (var i = 0; i < array.Length; i++) { res[i + 1, keyCounter] = Convert2Excel(array.GetValue(i)); } if (array.Length + 1 < res.GetLength(0)) { for (var i = array.Length; i < res.GetLength(0) - 1; i++) { res[i + 1, keyCounter] = ""; // remove null elements } } } else { res[1, keyCounter] = Convert2Excel(kv.Value); if (1 < res.GetLength(0)) { for (var i = 1; i < res.GetLength(0) - 1; i++) { res[i + 1, keyCounter] = ""; // remove null elements } } } keyCounter++; } return(res); } catch (ConversionException e) { return(new object[, ] { { e.Message } }); } }
// ReSharper disable InconsistentNaming public object[] qDict(object keys, object values, object types) // ReSharper restore InconsistentNaming { if (!(values is Array)) { values = new[] { values } } ; if ((values as Array).Rank != 2 && !(keys is Array)) { values = new[] { values } } ; if (!(keys is Array) && keys != null) { keys = new[] { keys } } ; var array = keys as Array; if (array != null && array.Rank == 2) //thats how it comes from worksheet. { var k = keys as Array; if (k.GetLength(0) == 1 || k.GetLength(1) == 1) { keys = Utils.Com2DArray2Array(k); } } var res = qList(values, types, true); if (res[2] != null) { return(res); } var dict = new QDictionary(keys as Array, Conversions[res[0].ToString()] as Array); Conversions[res[0].ToString()] = dict; return(res); }
public void TestQDictionary() { string[] keys = new string[] { "foo", "bar", "z" }; object[] values = new object[] { 1, "val", null }; var d = new QDictionary(keys, values); Assert.IsTrue(d.Equals(new QDictionary(keys, values))); var e = d.GetEnumerator(); int i = 0; while (e.MoveNext()) { var kv = e.Current; Assert.AreEqual(keys[i], kv.Key); Assert.AreEqual(values[i], kv.Value); i++; } Assert.AreEqual(i, d.Count); var table = new QTable(new[] { "eid" }, new object[] { new[] { 1001, 1002, 1003 } }); d = new QDictionary(keys, table); Assert.IsTrue(d.Equals(new QDictionary(keys, table))); e = d.GetEnumerator(); i = 0; while (e.MoveNext()) { var kv = e.Current; Assert.AreEqual(keys[i], kv.Key); Assert.AreEqual(table[i].ToArray(), ((QTable.Row)kv.Value).ToArray()); i++; } Assert.AreEqual(i, d.Count); }
static void PrintResult(QDictionary d) { foreach (QDictionary.KeyValuePair e in d) { Console.WriteLine(e.Key + "| " + e.Value); } }
protected string MakeFilterText(IBNReportTemplate repTemp, QObject qItem) { string retval = ""; foreach (FilterInfo fi in repTemp.Filters) { QField qTemp = qItem.Fields[fi.FieldName]; if (qTemp == null) { continue; } QDictionary qDTemp = qItem.GetDictionary(qTemp); if (qDTemp != null) { if (fi.Values.Count > 0) { retval += qTemp.FriendlyName + " = "; string sqlCommand = qDTemp.GetSQLQuery(Security.CurrentUser.LanguageId); using (IDataReader reader = Report.GetQDictionary(sqlCommand)) { ArrayList alDicVal = new ArrayList(); foreach (string _s in fi.Values) { alDicVal.Add(_s); } while (reader.Read()) { if (alDicVal.Contains(reader["Id"].ToString())) { retval += "<font color='red'>" + CommonHelper.GetResFileString(reader["Value"].ToString()) + "</font>, "; } } } retval = retval.Remove(retval.Length - 7, 7) + "<br>"; } } else { switch (qTemp.DataType) { case DbType.Decimal: case DbType.Int32: if (fi.Values.Count > 0) { retval += qTemp.FriendlyName; switch (fi.Values[0]) { case "0": retval += " =<font color='red'> " + fi.Values[1] + "</font><br>"; break; case "1": retval += " ><font color='red'> " + fi.Values[1] + "</font><br>"; break; case "2": retval += " <<font color='red'> " + fi.Values[1] + "</font><br>"; break; case "3": retval += " <font color='red'>" + LocRM.GetString("tBetween") + " " + fi.Values[1] + " - " + fi.Values[2] + "</font><br>"; break; } } break; case DbType.DateTime: case DbType.Date: if (fi.Values.Count > 0) { retval += qTemp.FriendlyName; switch (fi.Values[0]) { case "1": retval += " = <font color='red'>" + LocRM.GetString("tToday") + "</font><br>"; break; case "2": retval += " = <font color='red'>" + LocRM.GetString("tYesterday") + "</font><br>"; break; case "3": retval += " = <font color='red'>" + LocRM.GetString("tThisWeek") + "</font><br>"; break; case "4": retval += " = <font color='red'>" + LocRM.GetString("tLastWeek") + "</font><br>"; break; case "5": retval += " = <font color='red'>" + LocRM.GetString("tThisMonth") + "</font><br>"; break; case "6": retval += " = <font color='red'>" + LocRM.GetString("tLastMonth") + "</font><br>"; break; case "7": retval += " = <font color='red'>" + LocRM.GetString("tThisYear") + "</font><br>"; break; case "8": retval += " = <font color='red'>" + LocRM.GetString("tLastYear") + "</font><br>"; break; case "9": if (DateTime.Parse(fi.Values[1]) == DateTime.MinValue) { retval += " <font color='red'>" + LocRM.GetString("tLess") + " " + DateTime.Parse(fi.Values[2]).ToShortDateString() + "</font><br>"; } else if (DateTime.Parse(fi.Values[2]) >= DateTime.MaxValue.Date) { retval += " <font color='red'>" + LocRM.GetString("tGreater") + " " + DateTime.Parse(fi.Values[1]).ToShortDateString() + "</font><br>"; } else { retval += " <font color='red'>" + LocRM.GetString("tBetween") + " " + DateTime.Parse(fi.Values[1]).ToShortDateString() + " - " + DateTime.Parse(fi.Values[2]).ToShortDateString() + "</font><br>"; } break; } } break; case DbType.String: if (fi.Values.Count > 0) { retval += qTemp.FriendlyName + " = <font color='red'>" + fi.Values[0] + "</font><br>"; } break; case DbType.Time: retval += qTemp.FriendlyName; if (fi.Values.Count > 0) { switch (fi.Values[0]) { case "0": retval += " =<font color='red'> " + CommonHelper.GetHours(int.Parse(fi.Values[1])) + "</font><br>"; break; case "1": retval += " ><font color='red'> " + CommonHelper.GetHours(int.Parse(fi.Values[1])) + "</font><br>"; break; case "2": retval += " <<font color='red'> " + CommonHelper.GetHours(int.Parse(fi.Values[1])) + "</font><br>"; break; case "3": retval += " <font color='red'>" + LocRM.GetString("tBetween") + " " + CommonHelper.GetHours(int.Parse(fi.Values[1])) + " - " + CommonHelper.GetHours(int.Parse(fi.Values[2])) + "</font><br>"; break; } } else { retval += "<br>"; } break; } } } return(retval); }