Desidero un metodo come OrderBy()
che ordini sempre ignorando le lettere accentate e guardarle come non accentate. Ho già provato a sovrascrivere OrderBy()
ma sembra che non posso farlo perché questo è un metodo statico.Ordine Per ignorare le lettere accentate
Così ora voglio creare un'espressione lambda personalizzato per OrderBy()
, in questo modo:
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));
}
Tuttavia, sto ottenendo questo errore:
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.
sembra che non gli piace StringComparer
. Come posso risolvere questo?
Nota:
ho già cercato di usare RemoveDiacritics()
da here ma non so come utilizzare questo metodo in questo caso. Così ho provato a fare qualcosa come this che sembra anche bello.
Si sta utilizzando Linq2Sql o LinqObjects? –
A cosa serve HashSet? – usr