GroupBy - Comparer, Mapped

Query
public void Linq45()
{
string[] anagrams = { "from ", " salt", " earn ", " last ", " near ", " form " };

var orderGroups = anagrams.GroupBy(
w => w.Trim(),
a => a.ToUpper(),
new AnagramEqualityComparer()
);

ObjectDumper.Write(orderGroups, 1);
}
Lambda Expression
public void DataSetLinq45()
{
var anagrams = testDS.Tables["Anagrams"].AsEnumerable();

var orderGroups = anagrams.GroupBy(
w => w.Field("anagram").Trim(),
a => a.Field("anagram").ToUpper(),
new AnagramEqualityComparer()
);

foreach (var g in orderGroups)
{
Console.WriteLine("Key: {0}", g.Key);
foreach (var w in g)
{
Console.WriteLine("\t" + w);
}
}
}
Utility Method
public class AnagramEqualityComparer : IEqualityComparer
{
public bool Equals(string x, string y)
{
return getCanonicalString(x) == getCanonicalString(y);
}

public int GetHashCode(string obj)
{
return getCanonicalString(obj).GetHashCode();
}

private string getCanonicalString(string word)
{
char[] wordChars = word.ToCharArray();
Array.Sort(wordChars);
return new string(wordChars);
}
}
Output
...
FROM
FORM
...
SALT
LAST
...
EARN
NEAR
Related Tutorial
Follow Us
https://www.facebook.com/Rookie-Nerd-638990322793530 https://twitter.com/RookieNerdTutor https://plus.google.com/b/117136517396468545840 #
Contents +