Примечание. Решено с помощью объединения LINQ.
Мне нужно сравнить значение списка из списка источников, если оно присутствует в списке адресатов, и если да, то сохранить его втретий список.
Код, который я написал, работает, но он занимает много времени, так как мой список источников содержит 30 тыс. элементов и сравнивает каждое значение элемента с целевым списком в 15 миллионов, что занимает много времени.время.потому что он будет перебирать весь список каждый раз (30k * 15 миллионов раз)
См. код, который, очевидно, не оптимален, но выполняет свою работу.
// The below code will generate the lists from CSV file
The lists are below for sample
**Source List**
FileId FilePath FileChecksum
1 somepath A check1
2 somepath AA check2
3 somepath AAB check3
4 somepath B check4
5 somepath BB check5
**Destination List**
StepId StatusID JobId ProjectId FileId FilePath
5 6 4 2091 577206853 somepath A
5 6 4 2092 577206853 somepath AA
5 6 4 2093 577206853 somepath AAA
5 6 4 2094 577206853 somepath AB
5 6 4 2095 577206853 somepath A
5 6 4 2096 577206853 somepath B
5 6 4 2097 577206853 somepath BB
List<Source> SourceList = File.ReadAllLines(@"D:\source.csv").Skip(1).Select(v => Source.SourceFromCSv(v)).ToList();
List<Destination> DestinationList = File.ReadAllLines(@"D:\Destination.csv").Skip(1).Select(d => Destination.FromDestinationCSV(d)).ToList();
//This will compare and create a new list
var result1 =
from s in SourceList
from d in DestinationList
where (d.FilePath.ToLower() == s.FilePath.ToLower())
select (d.StepId + "," + d.StatusId + "," + d.JobId + "," +
d.ProjectId + "," + d.FileId + "," + d.FilePath + "," +
s.FileChecksum);
Expected Result:
StepId StatusID JobId ProjectId FileId FilePath FileChecksum
5 6 4 2091 577206853 somepath A check1
5 6 4 2092 577206853 somepath AA check2
5 6 4 2095 577206853 somepath A check1
5 6 4 2096 577206853 somepath B check4
5 6 4 2097 577206853 somepath BB check5