如何在Distinct中使用lambda表达式

Med*_*tor 6 c# linq lambda distinct

可能重复:
Linq Distinct()使用委托进行相等比较

我需要通过ID获得唯一的PostViewModel.这与lambda表达有什么关系?

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

比较器:

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
}
Run Code Online (Sandbox Code Playgroud)

抱歉,对于LINQ的Distinct()使用委托进行相等比较,这是一个很好的例子.

SWe*_*eko 2

如果我理解正确的话,我也遇到过类似的问题。

基于这篇文章,我做了这个扩展方法

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

它会自动为给定的 lambda 生成必要的 IEqualityComparer 实现。在你的情况下,这将允许使用类似的东西:

return Employees
         .SelectMany(e => e.PostList.Posts)
         .Distinct(postViewModel => postViewModel.ID)
         .ToList(); 
Run Code Online (Sandbox Code Playgroud)