簡體   English   中英

C#Zip函數迭代兩個對象列表

[英]C# Zip Function to iterate through two lists of objects

我有一個程序可以從文件中創建對象列表,還可以從數據庫中創建具有相同類型對象但具有更少/和一些不同屬性的對象列表,例如:FILE中的列表:地址ID,地址,城市,州,郵編以及數據庫中的其他重要屬性列表:地址ID,地址,城市,州

我已在此CustObj上實現了IEquatable,以便僅與地址,城市和州進行比較,以期在兩個列表之間進行輕松的比較。

最終目標是從數據庫中獲取地址ID,並從文件中更新對象列表中每個地址的地址ID。 這兩個列表可能有很多對象(超過1,000,000個),所以我希望它能更快。

另一種方法是將其卸載到數據庫,並讓數據庫返回我們所需的信息。 如果那將顯着提高速度/提高資源效率,我會走這條路線,但我想先看看是否可以在代碼中快速高效地完成它。

無論如何,我看到有一個Zip方法。 我想知道我是否可以這樣說:“如果兩個列表之間存在匹配,請將數據保留在列表1中,但將列表1中每個對象的地址ID屬性更新為列表2中的地址ID”。

那可能嗎?

答案是,這確實取決於。 您沒有提到很多參數。

確保唯一的方法是構建一個解決方案(最好使用zip方法,因為它涉及的工作較少),並且如果該解決方案在您的要求參數范圍內(時間或其他任何參數,內存占用量?),您可以停止那里。

否則,您必須將其卸載到數據庫。 請注意,如果要使用zip方法,則必須同時將文件中的100萬條記錄和數據庫中的100萬條記錄保存在內存中。

將所有內容推送到數據庫的問題是,插入許多記錄會消耗資源(時間,空間等)。 而且,如果您想每天這樣做,那么從資源的角度來看,它將變得更加困難。

您的問題並沒有說這是一次性的還是生產環境中的日常事件。 即便如此,這也會影響選擇哪種方法。

要重復一遍,您將不得不嘗試不同的方法,以根據您的要求查看哪種方法最適合您:這是一次性的嗎? 該流程有多少資源? 它有多少時間? 可能還有更多。

聽起來也像.Aggregate()的工作

var aggreg = list1.Aggregate(otherListPrefilled, (acc,elemFrom1) => 
{  
     // some code to create the joined data, usig elemFrom1 to find
     // and modify the correct element in otherListPrefilled
    return acc;
});

通常我會使用一個空的otherListPrefilled,但是不確定它如何對100k數據項執行。

如果是一次性的,將文件放到csv,將其作為臨時表導入數據庫並在sql中加入數據的速度可能更快。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM