как удалить повторяющиеся записи из результатов linq в sql - PullRequest
1 голос
/ 25 мая 2010

Я хочу удалить повторяющиеся записи из результатов, но разные не делают этого для меня! почему ???

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();

Ответы [ 2 ]

1 голос
/ 25 мая 2010

Если предположить, что SearchResultItem является классом, а не структурой, то в качестве ссылочного типа он действительно «равен», только если он является ссылкой на тот же тип. Но вы создали новый объект для каждого результата. Все ваши значения будут считаться отличными, если:

  • Вы можете передать свой собственный объект IEqualityComparer. Или
  • вы можете сделать так, чтобы ваш класс реализовал IEquatable и переопределил свойства GetHashCode и Equals по умолчанию, чтобы сделать их равными, если все значения одинаковы (или по любым критериям подходит).
1 голос
/ 25 мая 2010

Возможно, вам придется реализовать собственный IEqualityComparer для SearchResultItem.

Затем вы можете передать это в Distinct и заставить его сравнивать, используя ваш код. Таким образом, вы гарантируете, что сравнение выполняется так, как вы хотите.

...