2017-06-16 115 views
1

我不敢相信仅仅比较使用linq的两个XML列来查看它们是否相等是非常困难的。这只发生在我的系统中,一次发生在一个蓝色的月亮中,但是我想在它发生时进行说明。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() 

更新:我还以为自己“拧紧它,我只会带回XML并在C#中操作它(比较它)。我讨厌不得不从数据服务器中取回XML来查看它们是否相等,但至少我可以在这一点上比较这些值。

有没有一种方法来确定使用linq这两个XML列是否相等?

任何洞察不胜感激。

+1

你想比较sql? –

+0

我真的很想用linq,如果可能的话,我可以使用sql将它简单地转换为varchar。 –

+0

顺便说一句,这是怎么一个问题起床投票在这里? :-) –

回答

2

解决方案1: 我给你做的LINQ SQL,可能是你可以创建一个计算列是SQL Server和投你的XML列到VARCHAR(2000)的例子,用此列到你的LINQ

解决方案2 : 创建转换列的视图为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"); 
+0

如何在我的答案中修改我原来的linq语句?你有我可以查看的样本或参考吗? –

+1

你使用实体框架+ LINQ到SQL它不是? – Esperento57

+0

是的,先生,我相信这是正确的。我们正在使用带有EF6封装的EF4。 –