【发布时间】:2016-04-04 05:54:37
【问题描述】:
在查询数据表然后将其保存到数据表时,避免重复的正确方法是什么。我正在使用下面的模式,一旦表格增长,它就很容易出错。我看了下面的提示。第一个 copyToDataTable() 看起来不太适用,第二个对我来说太复杂了。我想将以下代码拆分为 2 个单独的方法(第一个用于构建查询,第二个用于检索 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;
}
【问题讨论】:
-
请分享
RetrieveDataTableExConstraints()的实现 -
这只是使用 DataTable retrieveReady.... = reader.GetSchemaTable(); 从 SQL 服务器中检索 DataTable 的架构。 + 一些小的调整以删除 PK、允许空值等。
-
您的真正问题是什么? “避免重复”是什么意思?
-
嗨伊万。我在下面对 ViRuSTriNiTy 的评论中说明了这一点。对我来说,重复之处在于我硬编码匿名类型中的名称并将它们再次硬编码为 DataRows 的名称,而这些名称在我检索 DataTable 时已经设置。任何时候都有变化,这需要在很多地方进行更改。