2010-06-16 49 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"); 
相关问题