【发布时间】:2019-12-02 16:35:43
【问题描述】:
我见过与我类似的其他答案,但我很难将其应用到我的案例中。
我创建了一个 LINQ 查询,它将搜索两个集合并为我提供来自第二个集合的第三个项目集合,其特定属性与第一个集合中的相同属性不匹配:
private void GetOnOffConflicts()
{
DataAccess da = new DataAccess();
if (OnOffConflictLayers != null && OnOffConflictLayers.Count != 0)
{
OnOffConflictLayers.Clear();
}
var onOffQuery = from target in TargetDrawingLayers
from source in SourceDrawingLayers
where target.Name == source.Name && target.OnOff != source.OnOff
select target;
ObservableCollection<LayerModel> q = new ObservableCollection<LayerModel>(onOffQuery);
OnOffConflictLayers = q;
}
现在我有了第三组冲突,我可以运行以下方法来纠正冲突:
private void FixOnOffConflictsClick()
{
if (OnOffConflictLayers != null && OnOffConflictLayers.Count != 0)
{
DataAccess da = new DataAccess();
foreach (LayerModel onOffConflict in OnOffConflictLayers)
{
foreach(LayerModel sourceLayer in SourceDrawingLayers)
{
if(onOffConflict.Name == sourceLayer.Name)
{
string desiredSetting = sourceLayer.OnOff;
da.FixLayerConflict(onOffConflict.Path, onOffConflict.Name, desiredSetting);
}
}
}
}
}
我想将该嵌套的 foreach 循环转换为类似于我的第一个 LINQ 查询的语句,但在查询中调用 da.FixLayerConflict();。
这对嵌套的 foreach 来说是一个有意义的改进吗?我该怎么做?
我尝试过类似的方法:
var fixOnOffQuery = from conflict in OnOffConflictLayers
from source in SourceDrawingLayers
where conflict.Name == source.Name && conflict.OnOff != source.OnOff
select new
{
da.FixLayerConflict(conflict.Path, conflict.Name, source.OnOff)
};
但我对 LINQ 语法的了解还不够,无法创建有效的东西。
顺便说一句,我无法将修复方法添加到原始查询中,因为程序要求用户在采取行动之前检查冲突。
【问题讨论】: