2014-10-31 55 views
1

我在使用LINQ和2谓词时遇到了问题。基本上,我需要从符合我下面的谓词的文本文件中删除一行。但它不起作用,只有特定Environment.MachineName的行被删除。使用LINQ过滤掉文本文件中的行C#

编辑:为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是一个静态字符串,我的文本文件DOES包含与它在应用程序中的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

@BradleyDotNET为什么要删除它没有线?逻辑上说,它应该保留所有不包含一件事物并且不包含其他事物的行。它删除包含任何东西的所有行。 – Servy 2014-10-31 01:07:16

+0

@BradleyDotNET Appologies,我上面编辑了我的问题,它只删除特定机器名称的行,但不检查'rLogonTime'。 – 2014-10-31 01:07:45

+2

@TonyMontana肯定会检查rLogonTime。它只是不匹配任何。可能是由于日期时间格式的差异。 – 2014-10-31 01:09:08

回答

2

我认为你的逻辑几乎是正确的。你想排除包含Environment.MachineNamerLogonTime所有行,所以你要排除的线条是那些:

contains MachineName AND contains LogonTime 

所以包装,所有在NOT:

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

魔法,它的作品!谢谢。 – 2014-10-31 02:30:54