我在 SQL Server 中有一個名為“JobInfos”的資料庫表,其中包含許多列。
JobID - (int) 當添加資料時自動填充增量值細繩)
使用帶有物體框架和 CSVHelper 的 Blazor 應用程式每天多次寫入此表。這非常有效。CSV 檔案中的所有行都添加到資料庫中。
if (fileExist)
{
using (var reader = new StreamReader(@path))
using (var csv = new CsvReader(reader, config))
{
var records = csv.GetRecords<CsvRow>().Select(row => new JobInfo()
{
OrgCode = row.OrgCode,
OrderNumber = row.OrderNumber,
WorkOrder = row.WorkOrder,
Customer = row.Customer,
BaseModelItem = row.BaseModelItem,
OrdQty = row.OrdQty,
PromiseDate = row.PromiseDate,
LineType = row.LineType,
});
using (var db = new ApplicationDbContext())
{
while (!reader.EndOfStream)
{
if (lineNumber != 0)
{
db.AddRange(records.ToList());
db.SaveChanges();
}
lineNumber ;
}
NavigationManager.NavigateTo("/", true);
}
}
由于這些多個 CSV 檔案可以包含可能已經存在于資料庫表中的行,因此我在讀取表時得到重復記錄,這導致用戶手動洗掉所有較新的重復行以僅保留原始條目。
我無法控制 CSV 檔案或它們的創建。我正在嘗試僅添加包含基于 WorkOrder 編號的新資料的行,該編號不能與任何其他編號相同。
我在 StackOverflow 上找到了另一篇有幫助的帖子,但我遇到了一個我無法弄清楚的剩余錯誤。
有用的帖子
我在這里更改了代碼...
if (lineNumber != 0)
{
var recordworkorder = records.Select(x => x.WorkOrder).ToList();
var workordersindb = db.JobInfos.Where(x => recordworkorder.Contains(x.WorkOrder)).ToList();
var workordersNotindb = records.Where(x => !workordersindb.Contains(x.WorkOrder));
db.AddRange(records.ToList(workordersNotindb));
db.SaveChanges();
}
但是這條線...
var workordersNotindb = records.Where(x => !workordersindb.Contains(x.WorkOrder));`
最后拋出錯誤 (x.WorkOrder) - CS1503 引數 1:無法從“int”轉換為“DepotQ4.Data.JobInfo”
WorkOrder 是一個 int JobID 是主鍵和一個 int 表中的每條記錄都必須有一個唯一的 WorkOrder
我不確定我沒有看到什么。可以在這里使用一些幫助嗎?
uj5u.com熱心網友回復:
你的變數workordersindb是一個List<JobInfo>. 因此,當您嘗試從中進行選擇時,records.Where(x => !workordersindb.Contains(x.WorkOrder))您正在嘗試將JobInfoin的串列workordersindb與intof匹配x.WorkOrder。 workordersindb需要是 aList<int>才能與 一起使用Contains。 records本來會有同樣的問題,但是您通過創建變數recordworkorder并使用records.Select(x => x.WorkOrder)來獲取List<int>.
if (lineNumber != 0)
{
var recordworkorder = records.Select(x => x.WorkOrder).ToList();
var workordersindb = db.JobInfos.Where(x => recordworkorder.Contains(x.WorkOrder)).Select(x => x.WorkOrder).ToList();
var workordersNotindb = records.Where(x => !workordersindb.Contains(x.WorkOrder));
db.JobInfos.AddRange(workordersNotindb);
db.SaveChanges();
}
轉載請註明出處,本文鏈接:https://www.uj5u.com/shujuku/534662.html
下一篇:連接表并將分組資料選擇到串列中
