[英]Avoid duplication in DataTable query and build
在查詢數據表並將其保存到數據表時,避免重復的正確方法是什么。 我正在使用以下模式,一旦表增長,該模式很容易出錯。 我看了下面的提示。 首先, copyToDataTable()
看起來並不適用,其次,對於我來說太復雜了。 我想將下面的代碼分為2個單獨的方法(第一個用於構建查詢,第二個用於檢索DataTable)。 也許如果我避免在查詢中使用匿名類型,則應該更容易避免對所有列名進行硬編碼-但我對此莫名其妙。
從LINQ查詢結果集或https://msdn.microsoft.com/zh-cn/library/bb669096%28v=vs.110%29.aspx 填充數據集或數據表
public DataTable retrieveReadyReadingDataTable()
{
DataTable dtblReadyToSaveToDb = RetrieveDataTableExConstraints();
var query = from scr in scrTable.AsEnumerable()
from products in productsTable.AsEnumerable()
where(scr.Field<string>("EAN") == products.Field<string>("EAN"))
select
new
{
Date = DateTime.Today.Date,
ProductId = products.Field<string>("SkuCode"),
Distributor = scr.Field<string>("Distributor"),
Price = float.Parse(scr.Field<string>("Price")),
Url = scr.Field<string>("Url")
};
foreach (var q in query)
{
DataRow newRow = dtblReadyToSaveToDb.Rows.Add();
newRow.SetField("Date", q.Date);
newRow.SetField("ProductId", q.ProductId);
newRow.SetField("Distributor", q.Distributor);
newRow.SetField("Price", q.Price);
newRow.SetField("Url", q.Url);
}
return dtblReadyToSaveToDb;
}
首先,您必須確定案例中“重復”的含義。 根據您的代碼,我會說重復的行是在Date,ProductId和Distributor列中具有相同值的行。 因此,首先為這些列添加一個多列主鍵。
其次,您應該添加某種代碼,該代碼首先查詢現有行,然后將這些現有行與要創建的行進行比較。 如果找到匹配項,則只需不插入新行。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.