2009-08-18 74 views
2

我通过调用GetDirectories()LINQ到筛选目录

Ç得到followwing direcories \程序\ 20090531 \ C:\程序\ 20090630 \ C:\程序\ 20090731 \ C:\程序\ 20090831 \

我想20090531和20090731的目录,我如何通过LINQ的做呢? 谢谢!

回答

1

使用LINQ 。凡声明和String.Compare与X你最小和最大的目录名称(字符串)之间(字符串)。

不要打扰使用等等.Parse,只是做字符串比较 - 你的目录名称是数字反正,所以当你只能使用直接值比较无法解析每个。

var query = directories 
    .Where(x => { 
     return (String.Compare(x, @"c:\app\20090531") > 0 && String.Compare(x, @"c:\app\20090731") < 0) 
    }); 
+0

您写的查询不起作用,Lambda不会返回任何内容,您不会转义'\',并且您的第一个字符串的格式不相同。但比较应该工作 – 2009-08-18 03:23:16

+0

哎呀谢谢。编辑为sloppiness。 – jscharf 2009-08-18 03:34:28

3

。凡(X => X> “C:\应用\ 20090531” & & X < “C:\应用\ 20090731”)ToList()

的tolist是如果希望在一个。名单。如果你对IEnumerable没有问题,就不要关闭它。

+0

有更优雅的方法(解析日期等),但这应该完成它。 – 2009-08-18 01:53:09

0

我:运营商“>”不能应用于操作数的类型“字符串”和“串”

+0

你会想在那里插入你自己的逻辑。编写一个方法,该方法接受一个字符串并返回该路径是否有效的布尔值,然后在你的lambda中调用该方法。 – 2009-08-18 02:19:57

+0

啊,太对了。对于那个很抱歉。我比lambda比较更专注于lambda。 – 2009-08-19 15:38:06

0
var query = directories 
    .Where(d => { 
     int directoryNumber = int.Parse(d.Replace(@"c:\app\", string.Empty) 
      .Replace("\\", string.Empty)); 
     return directoryNumber > 20090531 && directoryNumber < 20090731; 
    }); 

您还可以,如果需要转换为DateTime的。

编辑:显然是stackoverflow,或任何解析它使用不喜欢我的逐字字符串。