2010-06-16 53 views
1

使用LINQ我打算分解下面的路徑string[],但是我想將它分解爲Binn文件夾。 LINQ中是否存在WHERE UNTIL運算符?LINQ表達式直到打破一個字符串

c:\Program Files\Microsoft SQL Server\MSSQL10.SQLEXPRESS\MSSQL\Binn\sqlservr.exe 

我想什麼待辦事項

var words = from word in thepath 
where UNTIL thepath == "Binn" 
select word; 
+2

必須使用LINQ這個?你不能使用'Path'類:http://dotnetperls.com/getdirectoryname然後你可以「分割」返回的目錄名來獲取路徑的每一部分。 – 2010-06-16 09:39:54

+0

因爲我想要完整的目錄到某個點。 LINQ似乎是一個更好的方法。 – wonea 2010-06-16 09:57:18

回答

3

使用Enumerable.TakeWhile擴展方法。 AFAIK,這裏沒有LINQ語法。

var words = thepath.TakeWhile(word => word != "Binn"); 
+0

排序TakeWhile是我所需要的,非常感謝您的款待。 – wonea 2010-06-16 09:58:26

4

首先,拆分路徑:

var parts = path.Split('\\'); 

要得到這個角色直到(但不包括) 「BINN」:

var start = parts.TakeWhile(p => p != "Binn"); 

要獲得(包括)「Binn」後的部分:

var rest = parts.SkipWhile(p => p != "Binn"); 

您也可以使用Skip或Take來消耗或丟棄序列中的特定數量的項目。

雖然如果您只想要路徑的文件名部分,請使用Path.GetFileName

1

把我的頭

 var path = @"c:\ Program Files\ Microsoft SQL Server\ MSSQL10.SQLEXPRESS\ MSSQL\ Binn\ sqlservr.exe"; 
     var words = path.Split('\\'); 
     var filteredWords = words.TakeWhile(w => w != "Binn"); 
0

的頂部,你也可以使用正則表達式

using System.Text.RegularExpressions; 
... 
String path = @"c:\Program Files\Microsoft SQL Server\MSSQL10.SQLEXPRESS\MSSQL\Binn\sqlservr.exe"; 
path = Regex.Replace(path, @".*\\Binn", "Binn"); 
相關問題