LINQ Select Distinct, игнорируя поле XML

У меня есть сложный запрос LINQ (с использованием LINQ 2 EF), который может возвращать повторяющиеся результаты, поэтому я использую метод .Distinct () , чтобы избежать дублирования. Вот скелет:

var subQuery1 = // one query...
var subQuery2 = // another query...
var result = subQuery1.Distinct().Union( subQuery2.Distinct() ).ToArray();

Каждый из подзапросов соединяется с общей пользовательской таблицей с другой таблицей и выполняет запрос «где», результаты позже объединяются в .Union (...) . Это работало нормально до тех пор, пока таблица не была изменена для включения столбца XML, что привело к следующему исключению:

тип данных xml не может быть выбран как отдельный, потому что он несопоставим

В этом случае мне все равно, если Столбец XML эквивалентен по результатам. на самом деле мне нужно только быть уверенным, что первичный ключ UserId различен в результатах.

Есть ли способ использовать Distinct () , но игнорировать столбец XML, или более простой способ гарантировать, что я удаляю записи из результата с тем же UserId эффективным способом ? В идеале при этом не будут извлекаться повторяющиеся записи из базы данных и не потребуется пост-обработка для удаления дубликатов.

Обновление: Я обнаружил, что если я сериализую свои запросы в массивы заранее, тогда нет необходимости в каком-либо компараторе, поскольку Linq2Objects не имеет проблемы с отдельным выбором XML. Например, я могу сделать это:

var subQuery1 = // one query...
var subQuery2 = // another query...
var result = 
   subQuery1.Distinct().ToArray().Union( 
      subQuery2.Distinct().ToArray() )
   .ToArray();

То, что я действительно ищу, - это способ избежать сериализации промежуточных запросов и выполнить прямой вызов Linq2Entities, который не будет извлекать записи с повторяющимися UserId s. Спасибо за все ответы.

7
задан TJB 14 October 2010 в 22:17
поделиться