C# : Filtering data of data table using select method
I have data table containing one column as FilePath.
FilePath
D:\New folder\link.txt D:\New folder\SharepointMigration(Work Schedule).xls D:\New folder\my2\link.txt D:\New folder\my2\SharepointMigration(Work Schedule).xls D:\New folder\my2\my3\New Text Document.txt D:\New folder\Try.txt
I am filtering my data table by
DataRow[] dtRow = dataTable_FilesWithMetaData.Select("FilePath Like '" + sourcePath + "%'");
But it gives me all files and subfolder files. But i want only开发者_C百科 files not subfolders. How to write such type of filter expression..??
EDIT: I am using VS-2008 2.0 framework. The files are coming from some server in xml format and then i am populating my gridview.
If LINQ is available:
DataTable dt = new DataTable();
dt.Columns.Add("FilePath", typeof(string));
dt.Rows.Add(@"D:\New folder\link.txt");
dt.Rows.Add(@"D:\New folder\my2\link.txt");
string target = Path.GetDirectoryName(@"D:\New folder\");
DataRow[] rows = dt.Rows.Cast<DataRow>().Where(dr =>
Path.GetDirectoryName(((string)dr["FilePath"])).Equals(target))
.ToArray();
This will only return the row containing ("D:\New folder\link.txt"
).
In .NET 2.0 you can create a helper method, something like this:
public static DataRow[] GetRowsForDir(DataTable table, string targetDir)
{
var result = new List<DataRow>();
foreach (DataRow row in table.Rows)
{
if (Path.GetDirectoryName(((string)row["FilePath"])).Equals(targetDir))
{
result.Add(row);
}
}
return result.ToArray();
}
If the files are on the machine running the application, why not just do a
Directory.GetFiles(sourcePath)
for the path you want?
精彩评论