2014-10-31 51 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