Вот пример, который, как я знаю, работает, я пробовал его только с небольшими файлами (File1.xml имел 20 элементов, File2.xml 8 элементов).
XDocument file1Doc = XDocument.Load("File1.xml");
XDocument file2Doc = XDocument.Load("File2.xml");
IEnumerable<string> file1Elements = from d in file1Doc.Descendants("Id")
select d.Value;
IEnumerable<string> file2Elements = from d in file2Doc.Descendants("Id")
select d.Value;
var difference = file1Elements.Except(file2Elements);
В качестве альтернативы, и, скорее всего, больше соответствует тому, что вы ищете:
XDocument file1Doc = XDocument.Load("File1.xml");
XDocument file2Doc = XDocument.Load("File2.xml");
IEnumerable<string> file2Elements = from d in file2Doc.Descendants("Id")
select d.Value;
var x = from include in file1Doc.Descendants("Id")
where file2Elements.Contains(include.Value) != true
select include;
Вы также можете найти некоторую помощь, посмотрев 101 Образцы LINQ на MSDN .