我正在检索两个使用Linq到实体的数据集列表。他们都在同一个数据库中,但我需要将一个表转换为我的任务表,因为它已集成到我的日历中。在这里不值得详细讨论,但我很想加快匹配id和创建新Task对象的过程。这是一次完成的片段,即使速度很慢,我也可以让程序在一夜之间运行。但是,为了将来的参考,我想提高一些提高效率的建议。当比较大型数据集时使用嵌套循环时速度变慢
var accounts = data.Accounts.ToList().OrderBy(a => a.ID);
Incidents[] Incidents = data.Incidents.ToArray();
for (int i=0;i<Incidents.Length;i++)
{
foreach (var a in accounts)
{
if (a.Acct_CID == Incidents[i].CustomerID)
{
Tasks t = new Tasks();
t.creator_id = a.ID;
t.start_date = Incidents[i].DateOpened;
t.end_date = Incidents[i].DateCLosed;
t.product_code = Incidents[i].ProductCode;
t.install_type = Incidents[i].InstallType;
t.os = Incidents[i].OSType;
t.details = Incidents[i].Description;
t.solution = Incidents[i].Solution;
t.creator_name = Incidents[i].TechID;
t.category = Incidents[i].Title;
t.text = "Ticket for" + " " + Incidents[i].Name;
if (t.end_date == DateTime.MinValue || t.end_date == null)
t.status_id = 6;
else t.status_id = 7;
data.Tasks.Add(t);
break;
}
}
}
data.SaveChanges();
对不起,订单是单独的方法没有显示在代码中,这是一个巨大的项目。我傻眼了,我没有想到这一点。今天无咖啡,谢谢你的帮助先生 – Chazt3n
我很惊讶我也没有想到它。 – Bobson
@ Chazt3n welcome :) BTW尽可能晚地调用ToList(),ToArray()和其他To *操作。所有这些都强制执行查询,稍后处理将仅发生在内存中。 –