2013-03-01 33 views
0

我试图迭代一个sting []并只获取尊重条件“包含”的记录。如何只选择包含条件的字符串记录使用Linq

我一直想这样的:

var lines = File.ReadAllLines("C:\\temp\\" + ReportPushFile("fileToSend_1.txt")).Where(i => i.Contains("BILL")); 

但这再次回到我的所有记录,没有任何过滤。怎么了?

class Program : Logger 
{ 
    public static FTPclient Ftp = new FTPclient("ftp://smsftp.mobyt.it/", "C17053_004", "i7z0dx5b"); 

    static void Main(string[] args) 
    { 
     List<Sms> sms = new List<Sms>(); 
     sms.Add(new Sms() { recipient = "+393664528452" }); 

     var lines = File.ReadAllLines("C:\\temp\\" + ReportPushFile("fileToSend_1.txt")).Where(i => i.StartsWith("BILL")); 

     // ... 
    } 

    public static string ReportPushFile(string NomeFile) 
    { 
     try 
     { 
      String LocalFileName = Ftp.ListDirectory("/reports/").Where(f => f.Contains(NomeFile)).OrderBy(x => new FileInfo(x).CreationTime).Max(); 
      Ftp.Download("/reports/" + LocalFileName, "c:\\temp\\" + LocalFileName, true); 

      return LocalFileName; 
     } 
     catch(Exception ex) 
     { 
      return string.Empty; 
     } 
    } 
} 
+0

尝试'i.StartWith(“Bill”);' – spajce 2013-03-01 14:05:24

+0

您将得到的代码将*过滤。我怀疑你错误地诊断它。请提供一个简短但完整的程序来展示问题。 – 2013-03-01 14:05:59

+0

我编辑了我的代码并添加了更多细节!我完美地工作,直到我们讨论的路线。我向我返回所有记录,并尊重我的意图。我发布的Linq产品线是不是应该如此运作! – 2013-03-01 14:11:31

回答

1

你的代码应该工作。让我们把它分解和做类型明确:

string path = "C:\\temp\\" + ReportPushFile("fileToSend_1.txt"); 

string[] readLines = File.ReadAllLines(path); 

IEnumerable<string> lines = readLines.Where(i => i.Contains("BILL")); 

现在,您可以设置一些调试点,并确认:

  1. readLines包含行的列表。
  2. lines只包含那些有BILL的行。
+0

总是全部记录!! :( – 2013-03-01 14:16:16

+0

@BrunoFerreira你在哪里可以看到_all records_(所有行)?在'readLines'或'lines'中,在我的例子中?'readLines'包含多少个元素,'lines'包含多少个元素? – Virtlink 2013-03-01 14:17:20

相关问题