public void CopyTo()
        {
            DataTable            table = new DataTable("test_table");
            DataColumnCollection cols  = table.Columns;

            cols.Add("test");
            cols.Add("test2");
            cols.Add("test3");
            cols.Add("test4");

            DataColumn[] array = new DataColumn[4];
            cols.CopyTo(array, 0);
            Assert.Equal(4, array.Length);
            Assert.Equal("test", array[0].ColumnName);
            Assert.Equal("test2", array[1].ColumnName);
            Assert.Equal("test3", array[2].ColumnName);
            Assert.Equal("test4", array[3].ColumnName);

            array = new DataColumn[6];
            cols.CopyTo(array, 2);
            Assert.Equal(6, array.Length);
            Assert.Equal("test", array[2].ColumnName);
            Assert.Equal("test2", array[3].ColumnName);
            Assert.Equal("test3", array[4].ColumnName);
            Assert.Equal("test4", array[5].ColumnName);
            Assert.Null(array[0]);
            Assert.Null(array[1]);
        }
Esempio n. 2
0
        public void CopyTo()
        {
            DataTable            Table = new DataTable("test_table");
            DataColumnCollection Cols  = Table.Columns;

            Cols.Add("test");
            Cols.Add("test2");
            Cols.Add("test3");
            Cols.Add("test4");

            DataColumn [] array = new DataColumn [4];
            Cols.CopyTo(array, 0);
            Assert.AreEqual(4, array.Length, "test#01");
            Assert.AreEqual("test", array [0].ColumnName, "test#02");
            Assert.AreEqual("test2", array [1].ColumnName, "test#03");
            Assert.AreEqual("test3", array [2].ColumnName, "test#04");
            Assert.AreEqual("test4", array [3].ColumnName, "test#05");

            array = new DataColumn [6];
            Cols.CopyTo(array, 2);
            Assert.AreEqual(6, array.Length, "test#06");
            Assert.AreEqual("test", array [2].ColumnName, "test#07");
            Assert.AreEqual("test2", array [3].ColumnName, "test#08");
            Assert.AreEqual("test3", array [4].ColumnName, "test#09");
            Assert.AreEqual("test4", array [5].ColumnName, "test#10");
            Assert.IsNull(array [0], "test#11");
            Assert.IsNull(array [1], "test#12");
        }
        public static List <string> GetColumns(this DataColumnCollection columns, string formula)
        {
            if (columns == null || columns.Count == 0 || formula.ToStringTrim() == "")
            {
                return(null);
            }

            formula = formula.ToLower();
            List <string> retVal = new List <string>();

            DataColumn[] dcs = new DataColumn[columns.Count];
            columns.CopyTo(dcs, 0);
            foreach (DataColumn col in dcs.OrderByDescending(q => q.ColumnName.Length))
            {
                if (!formula.Contains(col.ColumnName.ToLower()))
                {
                    continue;
                }

                formula = formula.Replace(col.ColumnName.ToLower(), "");
                retVal.Add(col.ColumnName);
            }

            if (retVal.Count == 0)
            {
                return(null);
            }
            return(retVal);
        }
        /// <summary>
        /// 将DataRow转为动态属性对象ExpandoObject
        /// </summary>
        /// <param name="row"></param>
        /// <param name="columns"></param>
        /// <returns></returns>
        private static ExpandoObject ToExpandoObject(DataRow row, DataColumnCollection columns = null)
        {
            var expandoObject = new ExpandoObject();
            var obj           = (IDictionary <string, object>)expandoObject;

            DataColumn[] columnsArray;
            if (columns == null)
            {
                columnsArray = row.GetColumnsInError();
            }
            else
            {
                columnsArray = new DataColumn[columns.Count];
                columns.CopyTo(columnsArray, 0);
            }

            foreach (var item in columnsArray)
            {
                obj.Add(item.ColumnName, row[item]);
            }

            return(expandoObject);
        }
Esempio n. 5
0
        /// <summary>
        /// This is the method that actually does the work.
        /// </summary>
        /// <param name="DA">The DA object can be used to retrieve data from input parameters and
        /// to store data in output parameters.</param>
        protected override void SolveInstance(IGH_DataAccess DA)
        {
            // Setup inputs
            string path = "";

            if (!DA.GetData("File Path", ref path))
            {
                return;
            }
            Vector3d vec = new Vector3d(0, 0, 0);

            DA.GetData("Vector", ref vec);

            // Setup output
            DataTree <Point3d> ptTree   = new DataTree <Point3d>();
            DataTree <string>  keysTree = new DataTree <string>();
            DataTree <string>  valsTree = new DataTree <string>();

            // Open shapefile from path
            Shapefile shp    = Shapefile.OpenFile(path);
            string    prjStr = shp.ProjectionString;
            string    prj    = shp.Projection.ToString();

            //Read features in the shapefile
            int pathCount = 0;

            foreach (Feature f in shp.Features)
            {
                // Get values for each feature
                GH_Path       p       = new GH_Path(pathCount);
                DataRow       dataRow = f.DataRow;
                List <string> vals    = new List <string>();
                foreach (object item in dataRow.ItemArray)
                {
                    vals.Add(item.ToString());
                }
                valsTree.AddRange(vals, p);



                // Get keys for each feature
                DataTable            table   = dataRow.Table;
                DataColumnCollection columns = table.Columns;
                DataColumn[]         dca     = new DataColumn[columns.Count];
                columns.CopyTo(dca, 0);
                List <string> keys = new List <string>();
                foreach (DataColumn col in dca)
                {
                    keys.Add(col.ColumnName.ToString());
                }
                keysTree.AddRange(keys, p);


                // Get pts for each feature and transform by user input vector
                List <Point3d> pts = new List <Point3d>();

                IList <DotSpatial.Topology.Coordinate> coords = f.Coordinates;
                foreach (DotSpatial.Topology.Coordinate coord in coords)
                {
                    Point3d pt = new Point3d(coord.X + vec.X, coord.Y + vec.Y, 0 + vec.Z);
                    pts.Add(pt);
                }
                ptTree.AddRange(pts, p);

                // Increment path
                pathCount++;
            }

            //Output the data
            DA.SetDataTree(0, keysTree);
            DA.SetDataTree(1, valsTree);
            DA.SetDataTree(2, ptTree);
            DA.SetData(3, prjStr);
            DA.SetData(4, prj);
        }
        public static LambdaExpression[] ToExpressions(this DataColumnCollection columns, List <string> fields, out string outFields)
        {
            outFields = "";

            if (fields == null || fields.Count == 0)
            {
                return(null);
            }
            fields = fields.ToList();
            List <DataColumn> listColumns = new List <DataColumn>();
            int index = -1;

            DataColumn[] dcs = new DataColumn[columns.Count];
            columns.CopyTo(dcs, 0);

            foreach (DataColumn column in dcs.OrderByDescending(q => q.ColumnName.Length))
            {
                if (!fields.Where(q => q.SplitByAs("Formula").ToLower().Contains(column.ColumnName.ToLower())).Any())
                {
                    continue;
                }

                for (int i = 0; i < fields.Count; i++)
                {
                    string field   = string.Format(" as {0}", fields[i].SplitByAs("Field"));
                    string formula = fields[i].SplitByAs("Formula");
                    int    pos     = -1;
                    while (++pos < formula.Length)
                    {
                        pos = formula.ToLower().IndexOf(column.ColumnName.ToLower(), pos);
                        if (pos == -1)
                        {
                            break;
                        }

                        string tmps = "";
                        if (pos > 0)
                        {
                            tmps = formula[pos - 1].ToStringTrim();
                        }
                        tmps += column.ColumnName;
                        if ((pos + column.ColumnName.Length) < (formula.Length))
                        {
                            tmps += formula[pos + column.ColumnName.Length].ToStringTrim();
                        }

                        //该字段是其它字段名的部分
                        if (tmps != column.ColumnName && columns.Contains(tmps))
                        {
                            continue;
                        }

                        if (!listColumns.Contains(column))
                        {
                            listColumns.Add(column);
                            index++;
                        }

                        formula = formula.Substring(0, pos) + string.Format("@{0}(it)", index) + formula.Substring(pos + column.ColumnName.Length);
                    }

                    fields[i] = formula + field;
                }
            }

            outFields = "";
            foreach (string f in fields)
            {
                outFields += string.Format(",{0}", f);
            }

            if (outFields.StartsWith(","))
            {
                outFields = outFields.Substring(1);
            }

            return(listColumns.ToExpressions().ToArray());
        }