我通过调用GetDirectories()LINQ到筛选目录
Ç得到followwing direcories \程序\ 20090531 \ C:\程序\ 20090630 \ C:\程序\ 20090731 \ C:\程序\ 20090831 \
我想20090531和20090731的目录,我如何通过LINQ的做呢? 谢谢!
我通过调用GetDirectories()LINQ到筛选目录
Ç得到followwing direcories \程序\ 20090531 \ C:\程序\ 20090630 \ C:\程序\ 20090731 \ C:\程序\ 20090831 \
我想20090531和20090731的目录,我如何通过LINQ的做呢? 谢谢!
使用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)
});
。凡(X => X> “C:\应用\ 20090531” & & X < “C:\应用\ 20090731”)ToList()
的tolist是如果希望在一个。名单。如果你对IEnumerable没有问题,就不要关闭它。
有更优雅的方法(解析日期等),但这应该完成它。 – 2009-08-18 01:53:09
我:运营商“>”不能应用于操作数的类型“字符串”和“串”
你会想在那里插入你自己的逻辑。编写一个方法,该方法接受一个字符串并返回该路径是否有效的布尔值,然后在你的lambda中调用该方法。 – 2009-08-18 02:19:57
啊,太对了。对于那个很抱歉。我比lambda比较更专注于lambda。 – 2009-08-19 15:38:06
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,或任何解析它使用不喜欢我的逐字字符串。
您写的查询不起作用,Lambda不会返回任何内容,您不会转义'\',并且您的第一个字符串的格式不相同。但比较应该工作 – 2009-08-18 03:23:16
哎呀谢谢。编辑为sloppiness。 – jscharf 2009-08-18 03:34:28