LINQ - 为每个结果添加静态文本

时间:2010-11-04 02:49:56

标签: c# .net linq c#-4.0

我有一个文件数组,但问题是根路径没有附加到文件,所以使用下面的数据,我如何将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 个答案:

答案 0 :(得分:4)

如果第二个参数的前导“Path.Combine”(blog entry有更多信息),显然\会忽略第一个参数。

这应该有效,它使用Path.Combine? operator来计算第二个参数中的前导斜杠:

var fileList = (from f in files 
                select Path.Combine(rootPath, 
                f.StartsWith("\\") ? f.Substring(1) : f)).ToList();

答案 1 :(得分:0)

如果更改

,查询可以正常工作

"\\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

e.g。

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

希望这有帮助