2014-01-26 213 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方法)。