我有2個表,我想知道標記爲IsCkecked = true的記錄中有多少表中沒有數據。 然後,我需要將它們標記爲false,以便它們再次獲得proses。我怎樣才能以快速的方式比較表柱,2表
第二個程序正在處理所有Table1記錄並將數據保存到Table2。
表1 90.000記錄 -Id -IsChecked -OtherData
表2 60.000記錄 -Id - 數據 -OtherData
我有這樣的代碼,它確實把工作做好,但它的太慢了。比較60k到90k,必須有更聰明的方法? 我該如何做得更好?
我可以使用EF而不是Linq嗎?
using DAL;
using System;
using System.Linq;
public class ReadData
{
DataModelContainer model;
public static void Main()
{
new ReadData();
Console.WriteLine("Done");
Console.ReadLine();
}
ReadData()
{
this.model = new DataModelContainer(); ;
var idRecord = this.model.IdListSet.Where(x => x.IsChecked == true).ToList(); //90.000 Table1
var record = this.model.CompRegSet.Where(z => z.HtmlRecord != null).ToList(); //60.000 Table2
Console.WriteLine("This many ID's are marked: " + idRecord.Count);
Console.WriteLine("This many have data: " + record.Count);
Console.ReadLine();
int i = 0;
foreach (var item in record)
{
foreach (var ids in idRecord)
{
if (item.Id == ids.Id)
{
i++;
ids.IsChecked = false;
this.model.SaveChanges();
}
}
}
Console.WriteLine(i);
}
}
你的方法看起來很合理,是不是很慢?或者你想最小化代碼? –
如果您按ID號排列了兩個列表,那麼您可以使用for循環而不是foreach - 並且不需要從內部循環的開始處開始。 – PaulF
個人而言,對於這種批量更新方案,我會寫一個'update' SQL語句,並在兩個表之間進行適當的連接,然後運行它。 – sstan