我在使用带有2个谓词的LINQ时遇到问题。基本上,我需要从与下面的谓词匹配的文本文件中删除一行。但它不起作用,只有特定Environment.MachineName
的行被删除。
编辑:添加了rLogonTime的输入数据
private static string rLogonTime = DateTime.Now.ToLongTimeString().ToString();
var oldLines = File.ReadAllLines(rLogonPath);
var newLines = oldLines.Where(x => !x.Contains(Environment.MachineName) && !x.Contains(rLogonTime)); //<--
File.WriteAllLines(rLogonPath, newLines);
有可能这样做吗?或者还有另一种方式吗?
干杯。
编辑:我再一次为不清楚而道歉。
rLogonTime
是一个静态字符串,我的文本文件包含与我的应用程序中的DEBUG模式相同的值。如果我尝试
var newLines = oldLines.Where(x => !x.Contains(rLogonTime));
它自己有效。 Environment.MachineName
但是他们不能一起工作。
此外,请求文本文件中的几行。
u####,######!,####.vshost.exe,31/10/2014,11:58:11 AM,PC-67027
u####,######!,####.vshost.exe,31/10/2014,12:15:02 PM,PC-65027
答案 0 :(得分:2)
我认为你的逻辑几乎是正确的。您要排除包含Environment.MachineName
和rLogonTime
的所有行,因此您要排除的行是:
contains MachineName AND contains LogonTime
所以将所有内容包装在NOT中:
var newLines = oldLines.Where(x => !(x.Contains(Environment.MachineName) && x.Contains(rLogonTime)))