2017-06-16 121 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。 –