C #: фильтрация данных таблицы данных с использованием метода выбора - PullRequest
2 голосов
/ 23 марта 2010

У меня есть таблица данных, содержащая один столбец как FilePath.

FilePath
D: \ New folder \ link.txt
D: \ New Папка \ SharepointMigration (работа Расписание) .xls
D: \ Новый папка \ my2 \ link.txt
D: \ New папка \ MY2 \ SharepointMigration (работа Расписание) .xls
D: \ Новый папка \ my2 \ my3 \ New Text Document.txt
D: \ Новая папка \ Try.txt

Я фильтрую свою таблицу данных по

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

Но он дает мне все файлы и вложенные папки. Но я хочу только файлы, а не подпапки. Как написать такой тип выражения фильтра .. ??

РЕДАКТИРОВАТЬ: я использую VS-2008 2.0 Framework. Файлы приходят с какого-либо сервера в формате xml, а затем я заполняю свой сеточный вид.

Ответы [ 2 ]

2 голосов
/ 23 марта 2010

Если 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 голосов
/ 23 марта 2010

Если файлы находятся на машине, на которой запущено приложение, почему бы просто не сделать

Directory.GetFiles(sourcePath)

за путь, который вы хотите?

...