Linq忽略OrderBy中的空格

时间:2020-01-14 23:33:00

标签: c# linq

我正在运行查询以检索郊区列表。当我应用OrderBy时(我希望按字母顺序排序)

query.OrderBy(s => s.Name);

我得到以下命令:

MOUNT ADA
MOUNTAIN BAY
MOUNTAIN GATE
MOUNTAIN VIEW
MOUNT ALFRED
MOUNT BEAUTY

似乎按郊区名称忽略空格并按空格排序。 我需要怎么做才能正确订购?我认为它们应该按以下顺序排列:

MOUNT ADA
MOUNT ALFRED
MOUNT BEAUTY
MOUNTAIN BAY
MOUNTAIN GATE
MOUNTAIN VIEW

2 个答案:

答案 0 :(得分:1)

由于各个字符组之间的空格,您的数据库设置似乎对排序顺序有影响。如果您在何处使用字符串方法Replace()替换那些空格,则结果集可能会获得所需的结果。但是,如果没有具有特定设置的PostgreSQL 12.1数据库,就不可能知道它是否会产生所需的结果。

    private static void TestOrderList()
    {
        var list = new List<string>();
        list.Add("MOUNTAIN GATE");
        list.Add("MOUNT ADA");
        list.Add("MOUNTXADA");
        list.Add("MOUNTAIN BAY APP TOAST");
        list.Add("MOUNTAIN BAY APP ATOAST");
        list.Add("MOUNTAIN BAY APPA");
        list.Add("MOUNTAIN BAY");
        list.Add("MOUNT ALFRED");
        list.Add("MOUNTAIN VIEW");
        list.Add("MOUNT BEAUTY");

        var q = list.AsEnumerable().OrderBy(r => r.Replace("~", ""));
        q.ToList().ForEach(s => Console.WriteLine(s));
    }

免责声明:这并不是一个解决方案,而更像是一个测试案例。我选择一个Tilda,因为它的ASCII字符排序较低。

答案 1 :(得分:-2)

我没有改变任何逻辑,但是简单的迭代就给了我预期的结果。

for it, i in enumerate(foo):
    if not it:
        s = np.array(i[startIndex:])
    else:
        s += i[startIndex:]

请参阅dotnet fiddle here

这是您想要看到的吗?