Neo
Neo

Reputation: 3399

Linq compare XML Values

I cannot believe it is so difficult to just compare two XML columns using linq to see if they are equal. This only happens in my system once in a blue moon, but I want to account for it when it does.

I have tried a straight comparison, and attempted the comparison with the .ToString() method. Both the attempts I made threw a useless error...

My original linq statement:

from al in ActivityLogs
join a in Activities on al.ActivityId equals a.ActivityId
join dva in AllDVAudits on al.ActivityLogId equals dva.ActivityLogId
where al.ProfileId == ProfileID 

I have tried adding this:

Where al.ProfileId == ProfileID 
  && al.OldData != al.NewData

And this

Where al.ProfileId == ProfileID    
 && al.OldData.ToString() != al.NewData.ToString()

UPDATE: I also thought to myself "Screw it, I will just bring back the XML and manipulate it ( compare it ) in C#". I hate to have to bring the XML back from my data server just to see if they are equal, but at least I can compare the values at this point.

Is there a way to just determine if the two XML columns are equal using linq?

Any insight greatly appreciated.

Upvotes: 2

Views: 232

Answers (1)

Esperento57
Esperento57

Reputation: 17472

Solution 1 : I you do Linq SQL, may be you can create a computed column is SQL Server with cast your XML column into varchar(2000) by example and use this column into your linq

Solution 2 : Create a view with convert column into varchar and use into Linq

Solution 3 : Create a view with your complete query and linq into this view

Solution 4 (i dont kwo if its work) :

    var all = from bm in context.MYTABLEs
              select new { name = bm.SPP_USER_ID, xml = (string)bm.SPP_BOOKMARKS_XML };

    var docs = from x in all
               select XDocument.Parse(x.xml);

    var href = from h in docs
               select h.Descendants("href");

Upvotes: 2

Related Questions