簡體   English   中英

實體框架中的不同記錄

[英]Distinct Records in Entity framework

我想區分數據列表

我的代碼:

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;

此代碼無法正常工作的數據表重復

至少有3種解決方案來應對這一挑戰:

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

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

  2. 構建將實現接口IEqulityComparer<PendingGRemsResultRecord> ,然后將此類的實例用於重載od Distinct()方法。

  3. PendingGRemsResultRecord類中實現IEquatable接口(使用EqualsGetHashCode方法)。

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

更新:它是如何工作的-因此,您沒有在PendingGRemsResultRecord類上指定EqualsGetHashCode ,則將通過引用比較該類的實例。 即使所有實例具有相同的屬性值,這也將使其視為不同。 您可以教導Distinct()方法查看值而不是比較引用(重寫EqualsGetHasCode ,創建並傳遞自定義比較器),但您還可以使用匿名對象的功能,這些對象具有使用值的默認EqualsGetHashCode實現屬性來檢查兩個匿名對象是否相等。

這正是我在這里使用的-將源序列對象投影到具有GUIDCreatorType屬性的匿名對象中。 然后,借助默認比較匿名對象的功能,您可以使用Distinct()僅獲取具有不同GUID和創建者類型的對象。 接下來是將不同結果簡單投影到您的PendingGRemsResultRecord

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM