我无法相信使用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列是否相等?
非常感谢任何洞察。
答案 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");