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]); }
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); }
/// <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()); }