6

重複の可能性:
Linq Distinct() は、等値比較子にデリゲートを使用します

ID で一意の PostViewModel を取得する必要があります。これをラムダ式でどのように行うのですか?

public IEnumerable<PostViewModel> DistinctPosts
{
  get 
  { 
    return Employees
             .SelectMany(e => e.PostList.Posts)
             .Distinct(new PostViewModelComparer())
             .ToList(); 
  }
}

比較者:

class PostViewModelComparer : IEqualityComparer<PostViewModel>
{
  #region IEqualityComparer<Contact> Members

  public bool Equals(PostViewModel x, PostViewModel y)
  {
    return x.ID.Equals(y.ID);
  }

  public int GetHashCode(PostViewModel obj)
  {
    return obj.ID.GetHashCode();
  }

  #endregion
}

申し訳ありませんが、これはLINQ の Distinct() の等値比較子にデリゲートを使用するからの重複です。

4

1 に答える 1

2

私があなたを正しく理解していれば、同様の問題がありました。

この投稿に基づいて、この拡張メソッドを作成しました

public static IEnumerable<T> Distinct<T>(this IEnumerable<T> source, 
                                         Func<T, object> keyExtractor)
{
  return source.Distinct(new KeyEqualityComparer<T>(keyExtractor));
}

指定されたラムダに必要な IEqualityComparer 実装を自動的に生成します。あなたの場合、それは次のようなものを使用できるようになります:

return Employees
         .SelectMany(e => e.PostList.Posts)
         .Distinct(postViewModel => postViewModel.ID)
         .ToList(); 
于 2012-12-20T07:31:10.253 に答える