比方说,我有一个字符串列表与瑞典的话:banan,äpple,apelsin,druva.
现在我想对这个列表进行排序(请记住,这是真实查询的一个非常简化的版本):
var result = from f in fruits // The list mentioned above
orderby f
select f
Run Code Online (Sandbox Code Playgroud)
这会给我:apelsin,äpple,banan,druva.然而,根据瑞典的字母,我应该得到:apelsin,banan,druva,äpple
我尝试过改变System.Threading.Thread.CurrentThread.CurrentCulture,sv-SE但这似乎并没有真正影响它.我是否必须编写自己的lambda函数并使用.OrderBy(...)或者我还能做些什么来保持LINQ完好无损?
我想要一个像OrderBy()这样的方法总是命令忽略重音字母,并像非重音一样看待它们.我已经尝试覆盖OrderBy()但似乎我不能这样做,因为这是一个静态方法.
所以现在我想创建一个自定义的lambda表达式OrderBy(),如下所示:
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));
}
Run Code Online (Sandbox Code Playgroud)
但是,我收到此错误:
错误2方法'System.Linq.Enumerable.OrderBy <TSource,TKey>的类型参数(System.Collections.Generic.IEnumerable <TSource>,System.Func <TSource,TKey>,System.Collections.Generic.IComparer <TKey >)'无法从使用中推断出来.尝试显式指定类型参数.
似乎它不喜欢StringComparer.我怎么解决这个问题?
注意:
我已经尝试使用RemoveDiacritics()从这里,但我不知道如何使用这种方法在这种情况下.于是,我就做这样的事情这似乎不错了.