For Each livm As LayerItemViewModel In esriLegend.LayerItems If TypeOf livm.Layer Is ArcGISDynamicMapServiceLayer Then Dim agdsl As ArcGISDynamicMapServiceLayer = CType(livm.Layer, ArcGISDynamicMapServiceLayer) Dim dvl As List(Of Integer) = (From x In agdsl.Layers Where CBool(x.DefaultVisibility) = True And x.SubLayerIds Is Nothing Select x.ID).ToList Dim gl As List(Of LayerInfo) = (From x In agdsl.Layers Where CBool(x.DefaultVisibility) = False And x.SubLayerIds IsNot Nothing).ToList For Each li As LayerInfo In gl For Each i As Integer In li.SubLayerIds dvl.Remove(i) Next Next agdsl.VisibleLayers = dvl.ToArray End If Next
Dim dvl As List(Of Integer) = (From x In agdsl.Layers Where CBool(x.DefaultVisibility) = True Select x.ID).ToList agdsl.VisibleLayers = dvl.ToArray
That being said, my feeling is that you shoud get the expected result with code like:Dim dvl As List(Of Integer) = (From x In agdsl.Layers Where CBool(x.DefaultVisibility) = True Select x.ID).ToList agdsl.VisibleLayers = dvl.ToArray
var ids = new List<int>(); var parentLayers = _dmsl.Layers.Where(x => x.SubLayerIds != null).ToArray(); foreach (var l in _dmsl.Layers) { if (parentLayers.Contains(l) && l.DefaultVisibility) { ids.Add(l.ID); } else { //find the parent of the child layer var pl = parentLayers.Where(x => x.SubLayerIds.Contains(x.ID)).FirstOrDefault(); //iterate through parent layers until we reached the outermost parent while (parentLayers.Contains(pl)) { var tempPl = parentLayers.Where(x => x.SubLayerIds.Contains(pl.ID)).FirstOrDefault(); if (tempPl == null) break; else pl = tempPl; } //determine if the layer should be visible if (pl != null) { if (pl.DefaultVisibility && l.DefaultVisibility) ids.Add(l.ID); } } }