相关疑难解决方法(0)

如何让LINQ根据文化订购?

比方说,我有一个字符串列表与瑞典的话: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完好无损?

c# linq sorting

21
推荐指数
1
解决办法
9305
查看次数

OrderBy忽略重音字母

我想要一个像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()这里,但我不知道如何使用这种方法在这种情况下.于是,我就做这样的事情似乎不错了.

c# sorting lambda expression letters

7
推荐指数
1
解决办法
667
查看次数

标签 统计

c# ×2

sorting ×2

expression ×1

lambda ×1

letters ×1

linq ×1