C#:使用select方法过滤数据表的数据

时间:2010-03-23 12:21:46

标签: c# select datatable row

我的数据表包含一列作为FilePath。

  

FilePath
D:\ New folder \ link.txt
D:\ New   文件夹\ SharepointMigration(工作   附表).xls
D:\新   folder \ my2 \ link.txt
D:\ New   文件夹\ MY2 \ SharepointMigration(工作   附表).xls
D:\新   folder \ my2 \ my3 \ New Text Document.txt   
D:\ New folder \ Try.txt

我按

过滤我的数据表
DataRow[] dtRow = dataTable_FilesWithMetaData.Select("FilePath Like '" + sourcePath + "%'");

但它给了我所有文件和子文件夹文件。但我只希望文件不是子文件夹。如何编写这种类型的过滤表达式。??

编辑:我正在使用VS-2008 2.0框架。 文件来自某个服务器的xml格式,然后我填充了我的gridview。

2 个答案:

答案 0 :(得分: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();
}

答案 1 :(得分:0)

如果文件在运行应用程序的计算机上,为什么不执行

Directory.GetFiles(sourcePath)

您想要的路径?