我有这个问题:
var newComponents = from ic in importedComponents
where !existingComponents.Contains(ic)
select ic;
Run Code Online (Sandbox Code Playgroud)
importedComponents并且existingComponents是类型的List<ImportedComponent>,并且仅存在于存储器中(不依赖于数据上下文).在这个例子中,importedComponents有超过6,100项,并existingComponents有511项.
这句话花了太长时间才完成(我不知道多久,我在20分钟后停止了剧本).我尝试了以下但没有提高执行速度:
var existingComponentIDs = from ec in existingComponents
select ec.ID;
var newComponents = from ic in importedComponents
where !existingComponentIDs.Contains(ic.ID)
select ic;
Run Code Online (Sandbox Code Playgroud)
任何帮助都感激不尽.
您可以使用以下方法Except来获取设置的差异:
var existingComponentIDs = existingComponents.Select(c => c.ID);
var importedComponentIDs = importedComponents.Select(c => c.ID);
var newComponentIDs = importedComponentIDs.Except(existingComponentIDs);
var newComponents = from ic in importedComponents
join newID in newComponentIDs on ic.ID equals newID
select ic;
foreach (var c in newComponents)
{
// insert into database?
}
Run Code Online (Sandbox Code Playgroud)
简而言之:Join方法可以建立一个哈希表作为索引来快速将两个表压缩在一起
| 归档时间: |
|
| 查看次数: |
850 次 |
| 最近记录: |