Пример #1
0
        /// <summary>
        /// Converts a list of DynamicResult records into a DataTable
        /// </summary>
        /// <param name="data">the list of dynamicresult that is being converted into a datatable</param>
        /// <param name="extensionForRowInResult">when provided adds a new field in the DynamicResult and maps back the generated data-row to each Record</param>
        /// <returns>the datatable containing the items</returns>
        public static DataTable ToDataTable(this IEnumerable <DynamicResult> data, string extensionForRowInResult = null)
        {
            DataTable     retVal = new DataTable();
            DynamicResult first  = data.FirstOrDefault();

            if (first != null)
            {
                string[] names = first.GetDynamicMemberNames().ToArray();
                foreach (string s in names)
                {
                    retVal.Columns.Add(s, GetTableType(first.GetType(s)));
                }

                foreach (DynamicResult res in data)
                {
                    DataRow row = retVal.NewRow();
                    foreach (string s in names)
                    {
                        row[s] = res[s] ?? DBNull.Value;
                    }

                    if (extensionForRowInResult != null)
                    {
                        res.Extendable = true;
                        res[extensionForRowInResult] = row;
                    }

                    retVal.Rows.Add(row);
                }
            }

            return(retVal);
        }
Пример #2
0
        /// <summary>
        /// Inserts a record into the specified table with the specified values
        /// </summary>
        /// <param name="value">the result containing the items inserted into the table</param>
        /// <param name="tableName">the tablename in which to insert the data</param>
        /// <param name="hardcodedValues">values that are hardcoded</param>
        public void InsertRecord(DynamicResult value, string tableName, Dictionary <string, string> hardcodedValues)
        {
            List <string> fields = new List <string>(hardcodedValues.Keys);
            List <string> values = new List <string>((from t in fields select hardcodedValues[t]));

            IDbDataParameter[] parameters = (from t in value.GetDynamicMemberNames() select GetParameter(t, value[t]) as IDbDataParameter).ToArray();
            (from t in value.GetDynamicMemberNames() select t).ToList().ForEach(fields.Add);
            (from t in value.GetDynamicMemberNames() select $"@{t}").ToList().ForEach(values.Add);
            string cmd = string.Format(SqlCommands.InsertWithGetIdentity, tableName, string.Join(",", fields), string.Join(",", values));
            int    id  = ExecuteCommandScalar <int>(cmd, parameters);

            if (value.Controller != null)
            {
                value.Controller.SetIndex(value, id);
            }
        }
Пример #3
0
 /// <summary>
 /// Maps the data of the dynamicResult instance into the T - Instance
 /// </summary>
 /// <param name="item">the item that contains the original data</param>
 /// <param name="target">the target instance into which the data is mapped</param>
 /// <param name="modelType">the meta-type used to identify mapped columns</param>
 public static void ToModel(this DynamicResult item, object target, Type modelType)
 {
     string[]  fieldNames = item.GetDynamicMemberNames().ToArray();
     MapRule[] rules      = DbColumnAttribute.GetRules(modelType).Clone() as MapRule[];
     for (int i = 0; i < rules.Length; i++)
     {
         MapRule r = rules[i];
         if (r != null && fieldNames.Any(n => n.Equals(r.FieldName, StringComparison.OrdinalIgnoreCase)))//Array.IndexOf(fieldNames, r.FieldName.ToLower()) != -1))))
         {
             try
             {
                 object val = item[r.FieldName];
                 if (!r.UseExpression)
                 {
                     r[target] = val;
                 }
                 else
                 {
                     r[target] = ProcessResolveExpression(r.ValueResolveExpression, val);
                 }
             }
             catch (Exception ex)
             {
                 LogEnvironment.LogEvent(string.Format("Failed to set value{1}{0}", ex.OutlineException(), Environment.NewLine), LogSeverity.Warning, "DataAccess");
             }
         }
         else if (r != null)
         {
             LogEnvironment.LogDebugEvent($"No Value found for MapRule {r.FieldName} ({r.UseExpression};{r.ValueResolveExpression}", LogSeverity.Report);
         }
     }
 }
Пример #4
0
 private static void CopyToDictionary(DynamicResult item, IDictionary <string, object> target, bool extendWithUppercase)
 {
     string[] fieldNames = item.GetDynamicMemberNames().ToArray();
     foreach (var fieldName in fieldNames)
     {
         target.Add(fieldName, item[fieldName]);
         if (extendWithUppercase && fieldName.ToUpper() != fieldName)
         {
             target.Add(fieldName.ToUpper(), item[fieldName]);
         }
     }
 }
Пример #5
0
        /// <summary>
        /// Inserts a record into the specified table with the specified values
        /// </summary>
        /// <param name="value">the result containing the items inserted into the table</param>
        /// <param name="tableName">the tablename in which to insert the data</param>
        /// <param name="hardcodedValues">values that are hardcoded</param>
        public void InsertRecord(DynamicResult value, string tableName, Dictionary <string, string> hardcodedValues)
        {
            List <string> fields     = new List <string>(hardcodedValues.Keys);
            List <string> values     = new List <string>((from t in fields select hardcodedValues[t]));
            var           parameters = (from t in value.GetDynamicMemberNames()
                                        select new { Field = t, Param = GetParameter(t, value[t]) as IDbDataParameter }).ToArray();
            var par = new List <IDbDataParameter>();

            parameters.ForEach(p =>
            {
                fields.Add(p.Field);
                values.Add(p.Param.ParameterName);
                par.Add(p.Param);
            });

            string cmd = string.Format(SqlCommands.InsertWithGetIdentity, tableName, string.Join(",", fields), string.Join(",", values));
            int    id  = ExecuteCommandScalar <int>(cmd, par.ToArray());

            if (value.Controller != null)
            {
                value.Controller.SetIndex(value, id);
            }
        }