![](/img/trans.png)
[英]Caching Method For Result String or Linq Query in Web Services C#
[英]C# LINQ - Edit my query to call a method on the result
我见过与我类似的其他答案,但我很难将其应用于我的案例。
我创建了一个 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 语法的了解不够,无法创建有效的东西。
顺便说一下,我无法将修复方法添加到原始查询中,因为这是程序要求用户在采取行动之前查看冲突的一部分。
我建议您不要尝试在 LINQ 查询中执行方法调用,而是通过查询您希望调用函数的项目来删除嵌套的 foreach,然后在单个 foreach 中使用该集合。
像这样的事情会起作用:
var conflictsAndSources = from conflict in OnOffConflictLayers
from source in SourceDrawingLayers
where conflict.Name == source.Name && conflict.OnOff != source.OnOff
select new { Conflict = conflict, Source = source };
foreach(var conflictAndSource in conflictsAndSources)
da.FixLayerConflict(conflictAndSource.Conflict.Path, conflictAndSource.Conflict.Name, conflictAndSource.Source.OnOff);
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.