在查询数据表然后将其保存到DataTable时,什么是避免重复的正确方法。我使用下面的模式,一旦表增长,就会出现非常容易出错的情况。我看了下面的提示。第一个copyToDataTable()
看起来并不适用,第二个对我来说太复杂了。我想将下面的代码分成两个单独的方法(第一个构建查询,第二个来检索DataTable)。也许如果我在查询中避免匿名类型,这应该更容易避免硬编码所有列名称 - 但我不知何故丢失了。
Filling a DataSet or DataTable from a LINQ query result set 要么 https://msdn.microsoft.com/en-us/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;
}
答案 0 :(得分:0)
首先,你必须决定什么&#34;重复&#34;在你的情况下意味着。根据您的代码,我会说副本是Date,ProductId和Distributor列中具有相同值的行。因此,首先为这些列添加多列主键。
其次,您应该添加某种首先查询现有行的代码,然后将这些现有行与您要创建的行进行比较。如果找到匹配项,则只需插入新行即可。