Chcę taką metodę, jak OrderBy()
, która zawsze zamawia ignorowanie akcentowanych liter i patrzenie na nie jak bez akcentu. Próbowałem już przesłonić OrderBy()
, ale wydaje się, że nie mogę tego zrobić, ponieważ jest to metoda statyczna.OrderBy ignorowanie akcentowanych liter
Więc teraz chcę utworzyć wyrażenie lambda dla OrderBy()
zwyczaj, tak:
public static IOrderedEnumerable<TSource> ToOrderBy<TSource, TKey>(
this IEnumerable<TSource> source, Func<TSource, TKey> keySelector)
{
if(source == null)
return null;
var seenKeys = new HashSet<TKey>();
var culture = new CultureInfo("pt-PT");
return source.OrderBy(element => seenKeys.Add(keySelector(element)),
StringComparer.Create(culture, false));
}
Jednak dostaję ten błąd:
Error 2 The type arguments for method 'System.Linq.Enumerable.OrderBy<TSource,TKey>(System.Collections.Generic.IEnumerable<TSource>, System.Func<TSource,TKey>, System.Collections.Generic.IComparer<TKey>)' cannot be inferred from the usage. Try specifying the type arguments explicitly.
wydaje się to nie podoba StringComparer
. Jak mogę to rozwiązać?
Uwaga:
Próbowałem już używać RemoveDiacritics()
z here ale nie wiem, jak korzystać z tej metody w tym przypadku. Więc próbowałem zrobić coś takiego, jak this, co również wydaje się fajne.
Czy używasz Linq2Sql lub LinqObjects? –
Do czego służy HashSet? – usr