使用LINQ过滤掉文本文件C#中的行

时间:2014-10-31 01:04:18

标签: c# linq

我在使用带有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

1 个答案:

答案 0 :(得分:2)

我认为你的逻辑几乎是正确的。您要排除包含Environment.MachineNamerLogonTime的所有行,因此您要排除的行是:

contains MachineName AND contains LogonTime

所以将所有内容包装在NOT中:

var newLines = oldLines.Where(x => !(x.Contains(Environment.MachineName) && x.Contains(rLogonTime)))