2010-05-25 95 views
1

我想從結果中刪除重複的記錄,但不同的不要這樣做對我來說!爲什麼???如何從結果linq刪除重複記錄到sql

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

回答

1

您可能必須爲SearchResultItem實現您自己的IEqualityComparer

然後,您可以將其傳遞給Distinct並強制它使用您的代碼進行比較。這樣你就可以確保比較的結果如何實現。

1

假設SearchResultItem是一個類而不是一個結構體,那麼作爲一個引用類型,如果它是對同一類型的引用,它纔是真正的「相等」。但是,您已經爲每個結果創建了一個新對象。除非:

  • 您可以傳入您自己的IEqualityComparer對象。或者,
  • 您可以讓您的課程實現IEquatable,並覆蓋默認的GetHashCodeEquals屬性,以使它們在所有值相同(或任何標準適用)時均等。
+0

第一種選擇更好,更簡單!謝謝 – Sadegh 2010-05-25 20:32:52

+0

如果這將是唯一的比較,或者比較與平常不同,是的。如果真的有東西讓對象每次「平等」,並且這種比較反覆發生,那麼第二個就很棒了。 – 2010-05-25 23:48:03