Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/306.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# LINQ OrderBy未按预期对字符串进行排序_C#_Linq_Razor - Fatal编程技术网

C# LINQ OrderBy未按预期对字符串进行排序

C# LINQ OrderBy未按预期对字符串进行排序,c#,linq,razor,C#,Linq,Razor,我正在使用Umbraco-CMS尝试对节点的集合(dynamicode类型)进行排序,而LINQ-OrderBy语句并不像人们所期望的那样工作。我肯定错过了什么,对吧 我一直在调试,所以 DynamicNodeList thingsToDo = Model.Descendants("Tourism-Things-To-Do"); if (thingsToDo != null && thingsToDo.Count() > 0) { foreach(d

我正在使用Umbraco-CMS尝试对节点的集合(dynamicode类型)进行排序,而LINQ-OrderBy语句并不像人们所期望的那样工作。我肯定错过了什么,对吧

我一直在调试,所以

DynamicNodeList thingsToDo = Model.Descendants("Tourism-Things-To-Do");
 if (thingsToDo != null && thingsToDo.Count() > 0)
    {
       foreach(dynamic thingToDo in thingsToDo)
        {
           @thingToDo.Name <br />   
        }
        <br />

        foreach(dynamic thingToDo in thingsToDo.OrderBy(x => x.Name, StringComparer.CurrentCultureIgnoreCase))
        {
           @thingToDo.Name <br />   
        }
    }
dynamicondelistthingstodo=Model.substands(“旅游业要做的事情”);
if(thingsToDo!=null&&thingsToDo.Count()>0)
{
foreach(thingsToDo中的动态thingToDo)
{
@thingToDo.Name
}
foreach(thingsToDo.OrderBy中的动态thingToDo(x=>x.Name,StringComparer.CurrentCultureIgnoreCase)) { @thingToDo.Name
} }
输出:

[Unsorted List from First Iteration] Quality Inn & Suites ​Days Inn Palm Tree Inn ​Super 8 ​Wyndie Crest Bed & Breakfast [Should be Alphabetical List from Second Iteration] ​Days Inn ​Super 8 ​Wyndie Crest Bed & Breakfast Palm Tree Inn Quality Inn & Suites
SortedDictionary<string, int> sd = new SortedDictionary<string, int>();
        foreach(DynamicNode thingToDo in thingsToDo)
        {
            List<char> temp = new List<char>();
            char[] parseWord = thingToDo.Name.ToCharArray();
            var brokenWord = parseWord.Select(x => x == 8203);

            var enumeratorWord = parseWord.GetEnumerator();
            var enumeratorBool = brokenWord.GetEnumerator();
            enumeratorBool.MoveNext();
             while(enumeratorWord.MoveNext())
             {
                 if(!(bool)enumeratorBool.Current)
                 {
                     temp.Add((char)enumeratorWord.Current);
                 }
             }
             var result = string.Join("", temp.ToArray());
             sd.Add(result, thingToDo.Id);   
        }
[第一次迭代中未排序的列表] 凯丽套房酒店 ​戴斯酒店 棕榈树酒店 ​速8 ​温迪佳洁士床早餐酒店 [应为第二次迭代中的字母列表] ​戴斯酒店 ​速8 ​温迪佳洁士床早餐酒店 棕榈树酒店 凯丽套房酒店
有谁能告诉我为什么这不起作用<代码>名称在此代码中只是一个字符串。

您的字符串可能从不可打印的字符开始。我建议您渲染原始字符串并查看它:

@Html.Raw(myString)

我能够将字符串分解成一个字符数组,我发现问题是在一些字符串的开头出现了零宽度空格字符的实例。我清除了这些字符的数组,并将它们添加回列表中,现在所有字符都可以正常工作了

代码:

[Unsorted List from First Iteration] Quality Inn & Suites ​Days Inn Palm Tree Inn ​Super 8 ​Wyndie Crest Bed & Breakfast [Should be Alphabetical List from Second Iteration] ​Days Inn ​Super 8 ​Wyndie Crest Bed & Breakfast Palm Tree Inn Quality Inn & Suites
SortedDictionary<string, int> sd = new SortedDictionary<string, int>();
        foreach(DynamicNode thingToDo in thingsToDo)
        {
            List<char> temp = new List<char>();
            char[] parseWord = thingToDo.Name.ToCharArray();
            var brokenWord = parseWord.Select(x => x == 8203);

            var enumeratorWord = parseWord.GetEnumerator();
            var enumeratorBool = brokenWord.GetEnumerator();
            enumeratorBool.MoveNext();
             while(enumeratorWord.MoveNext())
             {
                 if(!(bool)enumeratorBool.Current)
                 {
                     temp.Add((char)enumeratorWord.Current);
                 }
             }
             var result = string.Join("", temp.ToArray());
             sd.Add(result, thingToDo.Id);   
        }
SortedDictionary sd=新的SortedDictionary();
foreach(DynamicNode thingToDo in thingsToDo)
{
列表温度=新列表();
char[]parseWord=thingToDo.Name.tocharray();
var brokenWord=parseWord.Select(x=>x==8203);
var enumeratorWord=parseWord.GetEnumerator();
var enumeratorBool=brokenWord.GetEnumerator();
enumeratorBool.MoveNext();
while(枚举器word.MoveNext())
{
if(!(bool)枚举器池当前)
{
temp.Add((char)枚举器word.Current);
}
}
var result=string.Join(“,temp.ToArray());
添加(结果,thingToDo.Id);
}

你能试试
thingsToDo.OrderBy(x=>x.Name.Trim(),StringComparer.CurrentCultureInoRecase)
吗?在呈现HTML输出时,名称中可能存在不可见的空格。您还可以使用
@thingToDo.Name
了解这两种方法,我尝试了这两种方法,但仍然没有成功。。。。输出是相同的,这不是一个坏主意,不幸的是我尝试了它,字符串的第一个字母是字符串的真正开始。您是否尝试过检查每个字符串的ASCII值?