Linq比较XML值

时间:2017-06-16 16:21:06

标签: c# xml linq

我无法相信使用linq比较两个XML列以查看它们是否相等是如此困难。这只发生在我的系统中,一次是在一个蓝色的月亮,但我想在它的时候考虑它。

我尝试过直接比较,并尝试与.ToString()方法进行比较。我的两次尝试都引发了一个无用的错误......

我原来的linq声明:

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 

我尝试添加此内容:

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

这个

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

更新:我也想过自己" 搞砸了,我会把它带回来并在C#&#34中操纵它(比较它) ;。我不得不从我的数据服务器返回XML,看它们是否相等,但至少我可以比较这一点的值。

有没有办法只使用linq确定两个XML列是否相等?

非常感谢任何洞察。

1 个答案:

答案 0 :(得分:2)

解决方案1: 我你做Linq SQL,可能你可以创建一个计算列是SQL Server,通过示例将你的XML列转换为varchar(2000)并将此列用于你的linq

解决方案2: 创建一个视图,将convert列转换为varchar并用于Linq

解决方案3: 使用完整查询和linq创建一个视图到这个视图

解决方案4(我不管它的工作如何):

    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");