Nie mogę znaleźć konkretnego przykładu, więc publikuję pytanie. Każda pomoc doceniona.Porównując dwie duże ogólne listy
Mam dwie duże ogólne listy, obie z ponad 300 000 pozycji.
Pętlę przez pierwszą listę, aby pobrać informacje i wygenerować nowy element dla nowej listy w locie, ale muszę przeszukać w ramach drugiej listy i zwrócić wartość, na podstawie TRZECH pasujących kryteriów, jeśli znaleziono aby dodać do listy, jak możesz sobie wyobrazić, zrobienie tego 300k * 300k razy zajmuje trochę czasu.
Czy jest jakiś sposób, aby zrobić to bardziej efektywnie?
Mój kod:
var reportList = new List<StocksHeldInCustody>();
foreach (var correctDepotHolding in correctDepotHoldings)
{
var reportLine = new StocksHeldInCustody();
reportLine.ClientNo = correctDepotHolding.ClientNo;
reportLine.Value = correctDepotHolding.ValueOfStock;
reportLine.Depot = correctDepotHolding.Depot;
reportLine.SEDOL = correctDepotHolding.StockCode;
reportLine.Units = correctDepotHolding.QuantityHeld;
reportLine.Custodian = "Unknown";
reportLine.StockName = correctDepotHolding.StockR1.Trim() + " " + correctDepotHolding.StockR2.Trim();
//Get custodian info
foreach (var ccHolding in ccHoldList)
{
if (correctDepotHolding.ClientNo != ccHolding.ClientNo) continue;
if (correctDepotHolding.Depot != ccHolding.Depot) continue;
if (correctDepotHolding.StockCode != ccHolding.StockCode) continue;
if (correctDepotHolding.QuantityHeld != ccHolding.QuantityHeld) continue;
reportLine.Custodian = ccHolding.Custodian;
break;
}
reportList.Add(reportLine);
}
utworzyć skrót wszystkich Vars razem w obiekcie i tylko sprawdzić te muszą działać szybko następnie – EaterOfCode
Jakie jest źródło danych? Jeśli jest to przyzwoita baza danych, może to być lepiej zrobione po tej stronie. –
Zaktualizowałem moją ogólną odpowiedź ze szczegółami, jak wykonać sprzężenie zewnętrzne w linq – Arkiliknam