Вы получаете вывод, который вы имеете, потому что ваш Order
является string
. В качестве доказательства, этот пример показывает, что вы получите правильный выход, когда это целое число:
void Main()
{
var list = new List<Project>() { new Project() { Order = 1, Id = 147, Name = "Summary" }, new Project() { Order = -9, Id = 211, Name = "Software Functionality" } };
int value= list.OrderByDescending(a => a.Order).ThenBy(a => a.Name).ToList().First().Id;
Console.WriteLine (value);
}
public class Project
{
public int Order {get;set;}
public int Id {get;set;}
public string Name {get;set;}
}
Однако, в случае, если вам это нужно как строка: почему она не работает, как это?
Ознакомьтесь с перечнем CompareOptions
. Более конкретно: CompareOptions.IgnoreSymbols
.
Указывает, что сравнение строк должны игнорировать символы, такие как пробельных символов, знаков препинания, символы валют, знак процента, математические символы, амперсанд, и так далее. Это также объясняется here.
Это по существу делает ваш a 9
.
Вы можете обойти это легко создать свой собственный компаратор и передать его, что вам нужно:
public class CustomComparer : IComparer<string>
{
public int Compare(string x,string y)
{
return CultureInfo.CurrentCulture.CompareInfo.Compare(x, y, CompareOptions.Ordinal);
}
}
, которые могут быть использованы в качестве
new[] {"1", "-9"}.OrderByDescending(x => x, new CustomComparer())
Является ли 'Order' числовым или строковым типом? –
Я думаю, это не имеет значения, так как '-'' 'chr (45)'. –
Извините, просто скопируйте ошибку, это строка. – user1989