[英]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種解決方案來應對這一挑戰:
對Lambda表達式使用DistinctBy()
方法,例如:
var query = someData.DistinctBy(x => x.PropertyYouWantToDistinquishBy)
;
構建將實現接口IEqulityComparer<PendingGRemsResultRecord>
,然后將此類的實例用於重載od Distinct()
方法。
在PendingGRemsResultRecord
類中實現IEquatable
接口(使用Equals
和GetHashCode
方法)。
_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
類上指定Equals
和GetHashCode
,則將通過引用比較該類的實例。 即使所有實例具有相同的屬性值,這也將使其視為不同。 您可以教導Distinct()
方法查看值而不是比較引用(重寫Equals
和GetHasCode
,創建並傳遞自定義比較器),但您還可以使用匿名對象的功能,這些對象具有使用值的默認Equals
和GetHashCode
實現屬性來檢查兩個匿名對象是否相等。
這正是我在這里使用的-將源序列對象投影到具有GUID
和CreatorType
屬性的匿名對象中。 然后,借助默認比較匿名對象的功能,您可以使用Distinct()
僅獲取具有不同GUID和創建者類型的對象。 接下來是將不同結果簡單投影到您的PendingGRemsResultRecord
。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.