У меня есть сложный запрос 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. Спасибо за все ответы.