linq to xml using openaccess - googlesitemap creation

5 posts, 0 answers
  1. acm2001
    acm2001 avatar
    30 posts
    Member since:
    May 2007

    Posted 19 Jan 2009 Link to this post

    I am surprised at the small number of articles that cover how to export data from an sql database to an xml file using linq.
    I found the site Hooked on Linq which was very useful, but have now come up with an error that i can not get around.

    The example on this site uses the format: (in C#)

    XElement xml = new XElement("contacts",
                        from c in db.Contacts
                        orderby c.ContactId
                        select new XElement("contact",
                                  new XAttribute("contactId", c.ContactId),
                                  new XElement("firstName", c.FirstName),
                                  new XElement("lastName", c.LastName))
                        );
    

    Here is my code: (in VB)

    Dim scope As IObjectScope = BlogLinkVB.ObjectScopeProvider1.GetNewObjectScope()

     Dim xml As XElement = New XElement("urlset", _
                        From p In scope.Extent(Of BlogLinkVB.Category)() _
                        Select New XElement("url", _
                             New XElement("loc", p.Name), _
                             New XElement("lastmod", customdate), _
                             New XElement("changefreq", "daily"), _
                             New XElement("priority", "0.50")))

    As you might notice I am trying to create a Google Sitemap from data I have stored in my database, the tags from blogposts.

    The error message I am getting is:

    Unable to cast object of type 'System.Linq.Expressions.NewArrayExpression' to type 'OpenAccessRuntime.DataObjects.query.Node'.

    Description: An unhandled exception occurred during the execution of the current web request. Please review the stack trace for more information about the error and where it originated in the code.

    Exception Details: System.InvalidCastException: Unable to cast object of type 'System.Linq.Expressions.NewArrayExpression' to type 'OpenAccessRuntime.DataObjects.query.Node'.

    Source Error:

    Line 48:         'Next
    Line 49: 
    Line 50:         Dim xml As XElement = New XElement("urlset", _
    Line 51:                     From p In scope.Extent(Of BlogLinkVB.Category)() _
    Line 52:                     Select New XElement("url", _


    Any thoughts would be appreciated. My other calls in Linq are working ok and the scope.Extent() intellisense tooltip confirms that this is an IQueryable instance.

    When this is working it might make a very useful example for the OpenAccess demos page. Dynamic creation of xml from databases is very useful as is being able to make a rapid fire sitemap for google or yahoo and keep it easily updated.

    Thanks
    Alan







  2. Alexander
    Admin
    Alexander avatar
    727 posts

    Posted 21 Jan 2009 Link to this post

    Hello Alan,

    Unfortunately we do not currently support such queries. This feature is in our TODO list but I am not able to give you an exact time-frame when it will be ready for distribution.
    In the meantime you will have to first get the objects from the database and then create a XElement from them:

    var result = from c in scope.Extent<LinqToXML.Customer>() 
               select c; 
     
    List<XElement> elems = new List<XElement>(); 
     
    foreach( var x in result) 
    elems.Add(new XElement("contact"new XAttribute("contactId", x.ContactId), 
                                     new XElement("firstName", x.FirstName), 
                                     new XElement("lastName", x.LastName)) ); 
     
    XElement xml = new XElement("contacts", elems); 

    Hope this helps.

    Kind regards,
    Alexander
    the Telerik team

    Check out Telerik Trainer, the state of the art learning tool for Telerik products.
  3. DevCraft banner
  4. acm2001
    acm2001 avatar
    30 posts
    Member since:
    May 2007

    Posted 21 Jan 2009 Link to this post

    Thanks. Appreciate the quick response and the workaround.

    Great products. Great service.

    Would be nice to see a few more demos for using linq and openaccess similar to the asp.net ajax demos


  5. Dimitar Kapitanov
    Admin
    Dimitar Kapitanov avatar
    632 posts

    Posted 21 Jan 2009 Link to this post

    Hi acm2001,
    We will provide our version of Microsoft's L2S 101 Examples, in C# and VB.NET both. Expect them no later than Q1 2009 release.

    Regards,
    Dimitar Kapitanov
    the Telerik team

    Check out Telerik Trainer, the state of the art learning tool for Telerik products.
  6. acm2001
    acm2001 avatar
    30 posts
    Member since:
    May 2007

    Posted 21 Jan 2009 Link to this post

    You guys are the best.

    Here is the code which I have now working in VB based on the original google sitemap concept:

            Dim scope As IObjectScope = BlogLinkVB.ObjectScopeProvider1.GetNewObjectScope()
            Dim result As IObjectScopeQuery(Of BlogLinkVB.Category) = From p In scope.Extent(Of BlogLinkVB.Category)()

            Dim elems As List(Of XElement) = New List(Of XElement)
            Dim localMap = "http://xxxxxxxxxxxxxx.com/category/tag.aspx/"
            Dim customdate As String = String.Format(Date.Now, "yyyy/MM/dd")

            For Each p As Object In result
                elems.Add(New XElement("urlset", New XElement("url", _
                             New XElement("loc", localMap & p.Name), _
                             New XElement("lastmod", customdate), _
                             New XElement("changefreq", "daily"), _
                             New XElement("priority", "0.50"))))
            Next

            Dim xmlDoc As XElement = New XElement("contacts", elems)

    Thanks again.
    Alan
Back to Top
DevCraft banner