Note that there are some explanatory texts on larger screens.

plurals
  1. PO
    primarykey
    data
    text
    <p>The implementation at (german text) <a href="http://flurfunk.sdx-ag.de/2013/06/linq-iequalitycomparer-durch-lambda.html" rel="nofollow">Implementing IEqualityCompare with lambda expression</a> cares about null values and uses extension methods to generate IEqualityComparer.</p> <p>To create an IEqualityComparer in a Linq union your just have to write</p> <pre><code>persons1.Union(persons2, person =&gt; person.LastName) </code></pre> <p>The comparer:</p> <pre><code>public class LambdaEqualityComparer&lt;TSource, TComparable&gt; : IEqualityComparer&lt;TSource&gt; { Func&lt;TSource, TComparable&gt; _keyGetter; public LambdaEqualityComparer(Func&lt;TSource, TComparable&gt; keyGetter) { _keyGetter = keyGetter; } public bool Equals(TSource x, TSource y) { if (x == null || y == null) return (x == null &amp;&amp; y == null); return object.Equals(_keyGetter(x), _keyGetter(y)); } public int GetHashCode(TSource obj) { if (obj == null) return int.MinValue; var k = _keyGetter(obj); if (k == null) return int.MaxValue; return k.GetHashCode(); } } </code></pre> <p>You also need to add an extension method to support type inference</p> <pre><code>public static class LambdaEqualityComparer { // source1.Union(source2, lambda) public static IEnumerable&lt;TSource&gt; Union&lt;TSource, TComparable&gt;( this IEnumerable&lt;TSource&gt; source1, IEnumerable&lt;TSource&gt; source2, Func&lt;TSource, TComparable&gt; keySelector) { return source1.Union(source2, new LambdaEqualityComparer&lt;TSource, TComparable&gt;(keySelector)); } } </code></pre>
    singulars
    1. This table or related slice is empty.
    1. This table or related slice is empty.
    plurals
    1. This table or related slice is empty.
    1. This table or related slice is empty.
    1. This table or related slice is empty.
    1. This table or related slice is empty.
    1. VO
      singulars
      1. This table or related slice is empty.
    1. This table or related slice is empty.
 

Querying!

 
Guidance

SQuiL has stopped working due to an internal error.

If you are curious you may find further information in the browser console, which is accessible through the devtools (F12).

Reload