2010-03-15 18 views
2

我正在使用Linq從文本文件中選擇和處理行。我的txtfile是由管道字符「|」分隔的兩列。該文件包含以下內容:Linq - 使用非「IN」運算符從文本文件中選擇非重複行

HAbbe | 11
GABBOT | 22
DABDA | 33
RAchant | 44
RADA | 55
DABDA | 66

你會發現,3號線和線6有一個重複的ID(第1列)。我想用linq來初步讀取發佈的txt文件找到重複(並報告它),然後我想從ling查詢中只選擇不重複的行。以下是我的:

StreamReader srReader = new StreamReader(fUpload.PostedFile.InputStream); 

       var query1 = 
         from line in srReader.Lines() 
         let items = line.Split('|') 
         select new UploadVars() 
         { 
          ID = items[0], 
          Number = items[1] 
         }; 
       var GroupedQuery = from line in query1 
            group line by line.ID into grouped 
            where grouped.Count() > 1 
            select new { 
             ID = grouped.Key, 
             MCount = grouped.Count() 
            }; 

       StringBuilder sb = new StringBuilder(); 
       foreach (var item in GroupedQuery) 
       { 

        sb.AppendFormat("The following external ID's occur more than once and have not been processed:<br> {0}. Duplicated {1} times.", item.ID, item.MCount); 
       } 

這是一切都好,並給我正確的結果。我現在正在尋找除文本文件中的兩個重複行外的所有行。我已經由以下LINQ語句,但由於某種原因,我有沒有運氣:

//lets start at the beginnnig of the the posted filestream 
       fUpload.PostedFile.InputStream.Position = 0; 
       srReader = new StreamReader(fUpload.PostedFile.InputStream); 
       var query2 = from line in srReader.Lines() 
          let items = line.Split('|') 
          select new UploadVars() 
          { 
           ID = items[0], 
           Number = items[1] 
          };         

       var qryNoDupedMems = from Memb in query2 
             where !(from duped in GroupedQuery 
               select duped.ID) 
               .Contains(Memb.ID) 
             select Memb; 

qryNoDupedMems的結果是從文本文件的完整列表。有人能解釋我做錯了什麼在這裏... 由於提前

回答

2

group查詢中,grouped變量也包含該組中的電信設備製造商的IEnumerable

因此,你可以寫:

var nonDuplicates = from line in query1 
    group line by line.ID into grouped 
    where grouped.Count() == 1 
    select grouped.First() 
+0

感謝您的及時幫助與此有關。我能夠檢索所需的結果。你不知道爲什麼Not IN(!)操作符沒有返回正確的結果? – Hawkesy 2010-03-15 15:14:51