2015-12-15 2 views
-2

После того, как из this post можно создать новый список найденных дубликатов (и исключить) в слиянии? Я хочу сообщить пользователю, какие записи были исключены. Код, который у меня есть, работает в том, что он правильно объединяет данные и исключает любые повторяющиеся ключи, но я хочу показать ключи, исключенные после слияния.List Duplicates Игнорируется в LINQ Merge

 var fileLocation = @"D:\TFS2010-UK\Merge_Text\PM.INX"; 
     var fileContents = 
      File.ReadLines(FileLocation, Encoding.Default) 
       .Select(line => line.Split(',')) 
       .ToDictionary(line => line[0].Replace("\"", ""), line => line[1] + ',' + line[2] + ',' + line[3]); 
     // define an array of items to be added... 
     var newContent = new Dictionary<string, string> 
         { 
          { "XYZ789", "\"XYZ789\",1,123.789" }, 
          { "GHI456", "\"GHI456\",2,123.456" }, 
          { "ABC123", "\"ABC123\",1,123.123" } 
         }; 

     var uniqueElements = fileContents.Concat(newContent.Where(kvp => !fileContents.ContainsKey(kvp.Key))) 
       .OrderBy(x => x.Key) 
       .ToDictionary(y => y.Key, z => z.Value); 
     // append new lines to the existing file... 
     using (var writer = new StreamWriter(fileLocation)) 
     { 
      // loop through the data to be written... 
      foreach (var pair in uniqueElements) 
      { 
       // and write it to the file... 
       writer.WriteLine("\"{0}\",{1}", pair.Key, pair.Value); 
      } 
     } 

Большое спасибо. Martin

+1

Вы должны показать код, который не работает, и указать, что с ним связано. Затем мы можем помочь исправить это. В противном случае этот вопрос попросит нас сделать вашу работу. –

+0

Извинения. Надеюсь, я добавил достаточно подробностей, чтобы сделать вопрос более ясным. – MartinS

ответ

0
var removedKeys = newContent.Where(kvp => fileContents.ContainsKey(kvp.Key)) 
    .Select(kvp => kvp.Key); 

Просто выберите ключи в newContent, которые уже содержатся в файлеContents.