2014-01-26 133 views
0

我想數據重複的記錄

鮮明的名單

我的代碼:

PendingGRemsResult _Return = new PendingGRemsResult(); 

_Return.PendingGRemsResultRecord = Context.Where(a => a.Status == 0) 
    .Select(s => new PendingGRemsResultRecord 
    { GUID = s.GRemGUID.GUID, 
     Count = App.GroupedRemittance 
     .GetByFilter((gr => gr.GRemGUID.GUID == s.GRemGUID.GUID)) 
     .Count(), 
     CreatorType = s.GRemGUID.CreatorType.Value}) 
    .Distinct() 
    .ToList(); 

return _Return; 

這個代碼不工作數據窗臺複製

+0

您是否在PendingGRemsResultRecord類上重寫了'Equals'和'GetHashCode'? –

+0

不,我不喜歡@SergeyBerezovskiy –

+0

你想區分哪些屬性? –

回答

0
_Return.PendingGRemsResultRecord = 
    Context.Where(a => a.Status == 0) 
      .Select(a => new { 
       a.GRemGUID.GUID, 
       CreatorType = a.s.GRemGUID.CreatorType.Value }) 
      .Distinct() 
      .Select(x => new PendingGRemsResultRecord { 
        GUID = x.GUID, 
        Count = App.GroupedRemittance 
          .GetByFilter(gr => gr.GRemGUID.GUID == x.GUID) 
          .Count(), 
        CreatorType = x.CreatorType 
       }).ToList(); 

UPDATE:它是如何工作 - 因此你不要在你指定的EqualsGetHashCodePendingGRemsResultRecord類,那麼這個類的實例將參照比較有。即使它們具有相同的屬性值,它也會將所有實例視爲不同。您有幾種可能性來教導Distinct()方法查看值而不是比較參考(覆蓋EqualsGetHasCode,創建並傳遞自定義比較器),但您也可以使用匿名對象的強大功能,該對象具有使用屬性值的默認EqualsGetHashCode實現檢查兩個匿名對象是否相等。

這正是我在這裏使用的 - 將源序列對象投影到具有GUIDCreatorType屬性的匿名對象中。然後通過默認比較匿名對象的權力,您可以使用Distinct()來獲取具有不同guid和創建者類型的對象。接下來是將簡單的結果投影到您的PendingGRemsResultRecord

0

至少有3個解決這一挑戰:

  1. 使用DistinctBy()方法與lambda表達式,例如:

    var query = someData.DistinctBy(x => x.PropertyYouWantToDistinquishBy);

  2. 構建一個equalityComparer,它將實現接口IEqulityComparer<PendingGRemsResultRecord>,然後使用此類的一個實例作爲過載od Distinct()方法。

  3. 在您的PendingGRemsResultRecord類中執行IEquatable接口(使用EqualsGetHashCode方法)。