Med*_*tor 6 c# linq lambda 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()使用委托进行相等比较,这是一个很好的例子.
如果我理解正确的话,我也遇到过类似的问题。
基于这篇文章,我做了这个扩展方法
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)