【问题标题】:How use lambda expression in Distinct [duplicate]如何在 Distinct 中使用 lambda 表达式
【发布时间】:2017-01-25 00:58:35
【问题描述】:

可能重复:
Linq Distinct() use delegate for equality comparer

我需要通过 ID 获取唯一的 PostViewModel。如何使用 lambda 表达式?

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
}

对不起,这是来自Use a delegate for the equality comparer for LINQ's Distinct()的重复内容

【问题讨论】:

  • 如果您向我们展示您的课程是什么样子以及它们之间的关系,那就太好了。据我了解,一名员工包含一个包含个人 PostViewModel 的帖子列表?

标签: c# linq lambda distinct


【解决方案1】:

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

基于this post,我做了这个扩展方法

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

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

return Employees
         .SelectMany(e => e.PostList.Posts)
         .Distinct(postViewModel => postViewModel.ID)
         .ToList(); 

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-07-13
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多