2010-03-23 33 views
2

我有数据表包含一列作为FilePath。
C#:使用select方法过滤数据表的数据

文件路径
d:\新建文件夹\ link.txt
d:\新建文件夹 \ SharepointMigration(工作 附表).xls的
d:\新建文件夹 \ MY 2 \ link.txt
d :\新建文件夹 \ MY 2 \ SharepointMigration(工作 附表).xls的
d:\新建文件夹 \ MY 2 \ MY3 \新建文本文档.txt
d:\新建文件夹\ Try.txt

我被

DataRow[] dtRow = dataTable_FilesWithMetaData.Select("FilePath Like '" + sourcePath + "%'"); 

过滤我的数据表,但它给我的所有文件和子文件夹中的文件。但我只想要文件而不是子文件夹。如何编写这种类型的过滤器表达式?

编辑:我正在使用VS-2008 2.0框架。 这些文件来自一些服务器的XML格式,然后我填充我的GridView。

回答

2

如果LINQ提供:

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(); 

这只会返回一个包含行("D:\New folder\link.txt")。

在.NET 2.0中,您可以创建一个辅助方法,像这样:

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(); 
} 
+0

感谢JoãoAngelo,Ur帮助方法的工作原理。良好的方式来做这样的事情..再次感谢1s;) – Royson 2010-03-23 13:05:27

0

如果文件是运行应用程序的机器上,为什么不只是做一个

Directory.GetFiles(sourcePath) 

你想要的路径?

+0

该文件是从服务器的一些进来的XML格式,那么我填充gridview的。 – Royson 2010-03-23 12:33:32