LINQ - добавить статический текст к каждому результату - PullRequest
4 голосов
/ 04 ноября 2010

У меня есть массив файлов, но проблема в том, что корневой путь не привязан к файлу, поэтому, используя приведенные ниже данные, как мне добавить пункт linq к статической строке?

string rootPath = "C:\\Users\\MyUserName";

List<string> files = new List<string>();
files.Add("\\My Documents\\File1.txt");
files.Add("\\My Documents\\File2.txt");

Мне нужен список Path.Combine (rootPath, x);Я попробовал это, но не повезло:

var fileList = (from x in files
               select Path.Combine(rootPath, x)).ToList();

Но он не добавляет rootPath, fileList совпадает со списком файлов.

Есть идеи?

Ответы [ 2 ]

4 голосов
/ 04 ноября 2010

Очевидно, Path.Combine будет игнорировать первый параметр, если второй параметр имеет начальный "\" (эта запись в блоге содержит дополнительную информацию).

Это должно работать, он использует Path.Combine и оператор ? для учета начальных слешей во втором параметре:

var fileList = (from f in files 
                select Path.Combine(rootPath, 
                f.StartsWith("\\") ? f.Substring(1) : f)).ToList();
0 голосов
/ 04 ноября 2010

запрос работает нормально, если вы измените

"\\My Documents\\File1.txt" to @"My Documents\\File1.txt".

Причина описана в посте, упомянутом Donut.

Следовательно,

string rootPath = "C:\\Users\\MyUserName";

List<string> files = new List<string>();
files.Add(@"My Documents\\File1.txt");
files.Add(@"My Documents\\File2.txt");

var fileList = (from x in files select Path.Combine(rootPath, x)).ToList(); 

OR

var fileList = files.Select(i => Path.Combine(rootPath, i));

отлично работает.

Если вы вообще не хотите менять существующий источник, , тогда вместо Path.Combine используйте string.Concat

например

string rootPath = "C:\\Users\\MyUserName";

List<string> files = new List<string>();
files.Add("\\My Documents\\File1.txt");
files.Add("\\My Documents\\File2.txt");

var fileList = (from x in files select string.Concat(rootPath, x)).ToList(); 

OR
var fileList = files.Select(i => string.Concat(rootPath, i));

Надеюсь, это поможет

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...