asp.net मैं कैसे एक SiteMapNodeCollection से नोड्स को हटा सकते हैं?




vb.net repeater (3)

मुझे एक पुनरावर्तक मिल गया है जो सभी web.sitemap सूचीबद्ध करता है। इसका DataSource एक SiteMapNodeCollection । लेकिन, मैं नहीं चाहता कि मेरा पंजीकरण फॉर्म पृष्ठ वहां दिखाई देगा।

Dim Children As SiteMapNodeCollection = SiteMap.CurrentNode.ChildNodes

'remove registration page from collection
For Each n As SiteMapNode In SiteMap.CurrentNode.ChildNodes
If n.Url = "/Registration.aspx" Then
    Children.Remove(n)
End If
Next

RepeaterSubordinatePages.DataSource = Children

SiteMapNodeCollection.Remove() विधि एक फेंकता है

Not SupportedException: "संग्रह केवल पढ़ने के लिए है"

मैं डाटाबेस को पुनरावर्तक से पहले संग्रह से नोड कैसे निकाल सकता हूं?


मुझे यह कोड के साथ काम करने के लिए मिला है:

Dim children = From n In SiteMap.CurrentNode.ChildNodes _
               Where CType(n, SiteMapNode).Url <> "/Registration.aspx" _
               Select n
RepeaterSubordinatePages.DataSource = children

क्या एक बेहतर तरीका है जहां मुझे CType() का उपयोग करने की आवश्यकता नहीं है?

इसके अलावा, यह बच्चों को एक System.Collections.Generic.IEnumerable(Of Object) सेट करता है। System.Collections.Generic.IEnumerable(Of Object) क्या एक प्रणाली की तरह और अधिक दृढ़ता से टाइप किया गया वापस पाने का एक अच्छा तरीका है। System.Collections.Generic.IEnumerable(Of System.Web.SiteMapNode) या यहां तक ​​कि बेहतर System.Collections.Generic.IEnumerable(Of System.Web.SiteMapNode) System.Web.SiteMapNodeCollection ?


आपके सीटीइप की आवश्यकता नहीं होनी चाहिए

Dim children = _
    From n In SiteMap.CurrentNode.ChildNodes.Cast(Of SiteMapNode)() _
    Where n.Url <> "/Registration.aspx" _
    Select n

Linq और नेट 3.5 का उपयोग करना:

//this will now be an enumeration, rather than a read only collection
Dim children = SiteMap.CurrentNode.ChildNodes.Where( _
    Function (x) x.Url <> "/Registration.aspx" )

RepeaterSubordinatePages.DataSource = children 

Linq के बिना, लेकिन नेट 2 का उपयोग कर:

Function IsShown( n as SiteMapNode ) as Boolean
    Return n.Url <> "/Registration.aspx"
End Function

...

//get a generic list
Dim children as List(Of SiteMapNode) = _
    New List(Of SiteMapNode) ( SiteMap.CurrentNode.ChildNodes )

//use the generic list's FindAll method
RepeaterSubordinatePages.DataSource = children.FindAll( IsShown )

संग्रह से वस्तुओं को हटाने से बचें, क्योंकि यह हमेशा धीमा है जब तक आप कई बार के माध्यम से पाशन नहीं जा रहे हैं, तब तक आप बेहतर फ़िल्टरिंग कर रहे हैं।





sitemap