我認爲最有效的方式做到這將是創建一個通用模型類存儲每個用戶。像這樣...
public class User
{
public string Name { get; set; }
public string Surname { get; set; }
public int Age { get; set; }
public string Country { get; set; }
// This comparer will be used to find records that exist or don't exist.
public class KeyFieldComparer : IEqualityComparer<User>
{
public bool Equals(User u1, User u2)
{
return u1.Name == u2.Name && u1.Surname == u2.Surname;
}
public int GetHashCode(User u)
{
return u.Name.GetHashCode()^u.Surname.GetHashCode();
}
}
}
現在加載兩個CSV文件和Oracle表爲List<User>
對象......
List<User> csvList;
List<User> oracleList;
當兩個列表中含有數據,這將是很容易看到已經什麼存在於每個而不是命中數據庫...
// This will filter users that are in the CSV file that don't already exist in oracle.
var newUsers = csvList.Except(oracleList, new User.KeyFieldComparer());
然後,您可以遍歷每個新用戶並插入...
foreach (var newUser in newUsers)
InsertNewUser(newUser);
希望這是有幫助的。
UPDATE:
我最喜歡的方式是使用微ORM從數據庫加載到數據的列表,如Insight.Database。只需在nuget中搜索Insight.Database並安裝Insight.Database.Providers.Oracle。然後,您可以查詢該表到這樣的記憶......
List<User> oracleList;
using (var db = new OracleConnection(ConnectionString))
{
oracleList = db.QuerySql<User>("SELECT Name, Surname, Age, Country FROM Users");
}
只要在你的類模型的屬性相匹配,你選擇的列的名稱,它將正確映射它們(它不區分大小寫)。
好的謝謝,我對一個仍然不清楚的部分提出了一些問題。我如何繼續在我的數據庫中填充用戶表的列名和姓氏的oraclelist,在性能方面效率最高,成本最低。 – user2443476 2014-10-31 16:01:13
當我嘗試使用Query方法時,我收到了這個錯誤:'Oracle.DataAccess.Client.OracleConnection'不包含'Query'的定義,也沒有包含接受'Oracle.DataAccess'類型的第一個參數的擴展方法'Query' .Client.OracleConnection「可以找到(你是否缺少使用指令或程序集引用?) – user2443476 2014-11-03 09:16:45
右鍵單擊解決方案資源管理器中的項目。點擊管理nuget包。確保在線 - > nuget.org在左側選擇。在搜索中輸入「insight.database」。在搜索結果中選擇Insight.Database.Providers.Oracle,然後單擊安裝。這應該添加必要的擴展方法。參考:https://github.com/jonwagner/Insight.Database/wiki/A-Quick-Tour – Theo 2014-11-03 15:25:32