У меня есть простая модель данных с примерно 15 свойствами (имя, возраст и т. Д.).
Теперь у меня есть 2 списка: oldData и newData, которые я хочу сравнить и что-то с ними сделать. Проблема в том, что списки огромны (например, 1 миллион элементов), и мое простое представление о foreach требует много времени (~ 6 минут).
Как сделать это быстрее?
foreach (var item in oldItems)
{
try
{
var actualItem = actualItems.Where(x => x.ObjectId == item.ObjectId).SingleOrDefault();
if (actualItem == null)
{
insertList.Add(item);
continue;
}
// Compare
var same = actualItem.ClientId == item.ClientId
&& actualItem.Contract == item.Contract
&& actualItem.CurrentNodeOwnerId == item.CurrentNodeOwnerId
&& actualItem.ExternalInvoiceNo == item.ExternalInvoiceNo
&& actualItem.InternalInvoiceNr == item.InternalInvoiceNr
&& actualItem.InvoiceDate == item.InvoiceDate
&& actualItem.NodeStart == item.NodeStart
&& actualItem.ObjectNo == item.ObjectNo
&& actualItem.OrderAmount == item.OrderAmount
&& actualItem.OrderNo == item.OrderNo
&& actualItem.PaymentAmount == item.PaymentAmount
&& actualItem.PaymentCreatedDate == item.PaymentCreatedDate
&& actualItem.PaymentNo == item.PaymentNo
&& actualItem.PostingAmount == item.PostingAmount
&& actualItem.PostingEnterDate == item.PostingEnterDate
&& actualItem.ProcessWorkflowState == item.ProcessWorkflowState
&& actualItem.RefInvoiceSource == item.RefInvoiceSource
&& actualItem.RefInvoiceSourceId == item.RefInvoiceSourceId
&& actualItem.Status == item.Status
&& actualItem.TotalAmount == item.TotalAmount
&& actualItem.VendorName == item.VendorName
&& actualItem.VendorNo == item.VendorNo;
if (!same)
{
updateList.Add(item);
}
}
catch (Exception ex)
{
Log.Error(" Error when compare new ELO list with old ELO List in DWH Service: " + ex.Message + " | for Item: " + item.ObjectId, ex);
}
}