У меня сложный запрос LINQ (с использованием LINQ 2 EF), который может возвращать дублированные результаты, и поэтому я использую метод .Distinct()
, чтобы избежать дублирования. Вот скелет:
var subQuery1 = // one query...
var subQuery2 = // another query...
var result = subQuery1.Distinct().Union( subQuery2.Distinct() ).ToArray();
Каждый из подзапросов объединяет общую пользовательскую таблицу с другой таблицей и выполняет запрос 'where', результаты затем объединяются в .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
с. Спасибо за ответы на все вопросы.