2012-12-20 16 views
6

Powiel możliwe:
Linq Distinct() use delegate for equality comparerJak użyć wyrażenia lambda w ramach oddzielnych

muszę dostać unikalną PostViewModel przez ID. Jak to zrobić z wyrażeniem lambda?

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

comparer:

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 
} 

Przepraszam, to jest dublicate z Use a delegate for the equality comparer for LINQ's Distinct()

+0

Byłoby wspaniale, gdybyś pokazał nam, jak wyglądają Twoje zajęcia i jak się ze sobą łączą. Z tego co rozumiem, że pracownik zawiera listę postów, która zawiera pojedyncze PostViewModels? –

Odpowiedz

2

Jeśli rozumiem zostanie poprawnie, miałem podobny problem.

podstawie this post, zrobiłem ten sposób przedłużenie

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

który automatycznie generuje niezbędne wdrożenie IEqualityComparer dla danego lambda. W twoim przypadku umożliwi to użycie czegoś takiego:

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