C# LINQ OrderBy未按预期对字符串进行排序
我正在使用Umbraco-CMS尝试对节点的集合(dynamicode类型)进行排序,而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
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值?