Ну, это отчасти зависит от того, как вы хотите выразить это объединение. Если вы знаете запрос заранее, я бы лично использовал LINQ to Objects через LINQ to DataSet - это особенно удобно, если вы работаете со строго типизированными наборами данных, но он может работать даже без этого.
Пример кода для C # in Depth содержит несколько примеров в LINQ to DataSet, на которые вы могли бы взглянуть.
Теперь, если вы хотите также динамически читать запрос , это делает его намного сложнее.
Является ли этот XML на самом деле сериализованным набором данных XML? Вам определенно нужно вовлекать наборы данных вообще? Если это просто обычный XML, пытались ли вы использовать LINQ to XML с LINQ to Objects? Это может быть менее эффективно, но насколько это важно для вашего приложения? Насколько большими могут быть данные?