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

发布于 2024-08-26 01:51:14 字数 579 浏览 5 评论 0原文

我有包含一列作为文件路径的数据表。

文件路径
D:\New 文件夹\link.txt
D:\New 文件夹\SharepointMigration(工作 时间表).xls
D:\New 文件夹\my2\link.txt
D:\New 文件夹\my2\SharepointMigration(工作 时间表).xls
D:\New 文件夹\my2\my3\新建文本文档.txt
D:\新文件夹\Try.txt

我正在过滤我的数据表,

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

但它为我提供了所有文件和子文件夹文件。但我只想要文件而不是子文件夹。如何编写这种类型的过滤表达式..?

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

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 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.

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

凉宸 2024-09-02 01:51:14

如果 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:\Newfolder\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();
}

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();
}
偏爱你一生 2024-09-02 01:51:14

如果文件位于运行应用程序的计算机上,为什么不直接

Directory.GetFiles(sourcePath)

对您想要的路径执行 a 操作呢?

If the files are on the machine running the application, why not just do a

Directory.GetFiles(sourcePath)

for the path you want?

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文