2017-01-14 2 views
1

Пытается выполнить итерацию через csv и найти записи, где, если есть запись в текущем списке записей, которые имеют один и тот же родственный список, группируйте все записи с одним и тем же ссылочным узлом вместе и от них, вернуть запись с наибольшим RecordID.Итерирование элементов в списке и сравнение с тем же списком

Извините, если это не имеет смысла, я довольно новый.

Мой класс:

namespace Application 
{ 
    class DataRecord 
    { 
     public String RecordID { get; set; } 
     public String RelatedOrder { get; set; } 
    } 
} 
namespace ConsoleApplication1 
{ 
    class Program 
    { 
     static void Main(string[] args) 
     { 
      Console.WriteLine("File Path:"); 
      var filePath = Console.ReadLine(); 
      using (var sr = new StreamReader(filePath)) 
       { 
       var reader = new CsvReader(sr); 
       IEnumerable<DataRecord> records = reader.GetRecords<DataRecord>(); 
       foreach (var record in records) 
       { 
        // If there is a record within the current list of records that shares the same 
        // RelatedOrder, group all records with the same RelatedOrder and return the record 
        // with the greatest RecordID 

       } 
       Console.ReadKey(); 
      } 
     } 
    } 
} 

ответ

1

Вы можете использовать LINQ:

var recordsWithHighestRecordsByRelatedOrder = 
reader.GetRecords<DataRecord>() 
     .GroupBy(dr => dr.RelatedOrder) 
     .Select(g => g.OrderByDescending(i => i.RecordID).First()) 
  • Сначала вы группу все свои записи по relatedOrder
  • Это дает вам список групп (каждая группа имеет Ключ и представляет собой список или DataRecord)
  • Из этого списка списков вы выбираете t первый элемент в каждом списке с самым высоким показателем RecordId

ПРИМЕЧАНИЕ: будьте внимательны при сравнении и сортировке строк. Я предполагаю, что вы намерены заказать RecordId численно, а не в алфавитном порядке. Было бы лучше изменить ваш класс на следующее:

class DataRecord 
{ 
    public int RecordID { get; set; } // Make this an int 
    public String RelatedOrder { get; set; } 
} 
+0

Вы спасатель жизни, приятель. – Justin

Смежные вопросы