2010-05-25 82 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