я хочу удалить повторенную запись из результатов, но отличный не делают этого для меня! почему???
var results = (from words in _Xplorium.Words
join wordFiles in _Xplorium.WordFiles on words.WordId equals wordFiles.WordId
join files in _Xplorium.Files on wordFiles.FileId equals files.FileId
join urls in _Xplorium.Urls on files.UrlId equals urls.UrlId
where files.Title.Contains(query) || files.Description.Contains(query)
orderby wordFiles.Count descending
select new SearchResultItem()
{
Title = files.Title,
Url = urls.Address,
Count = wordFiles.Count,
CrawledOn = files.CrawledOn,
Description = files.Description,
Lenght = files.Lenght,
UniqueKey = words.WordId + "-" + files.FileId + "-" + urls.UrlId
}).Distinct();
Возможно, вам придется реализовать собственный IEqualityComparer для SearchResultItem.
Затем вы можете передать это в Distinct и заставить его сравнивать с помощью вашего кода. Таким образом вы убедитесь, что сравнение проводится так, как вы хотите.
Предполагая, что SearchResultItem является классом, а не структурой, тогда как ссылочный тип он действительно «равен», только если это ссылка на тот же тип. Но вы создали новый объект для каждого результата. Все ваши значения будут считаться различными, если:
GetHashCode
и Equals
, чтобы сделать их равными, если все значения одинаковы (или другие критерии соответствующий).