LINQ查询用于对具有NULL的数字字符串列表进行排序

时间:2017-01-06 10:15:18

标签: string linq numeric

我有一个字符串列表:

6, 5, 11, 1, 10, 3, NULL, NULL

我需要一个LINQ查询来排序/命令,所以我得到了这个:

1, 5, 6, 10, 11, NULL, NULL

我不想转换列表。这几乎有效:

list myList = myList.OrderBy(x => int.Parse(x)).ToList();

但是NULL会打破它。我确信这很容易,但TIA。

  • 使用C#

2 个答案:

答案 0 :(得分:1)

你可能只是尝试过这样的事情:

list myList = myList.Where(item=>item!=null).OrderBy(x => int.Parse(x)).ToList(); 

OR

list myList = myList.OrderBy(x => int.Parse(x ?? 0)).ToList();

答案 1 :(得分:0)

string[] xs = new[] { "6", "5", "11", "1", "10", "3", null, null };
IOrderedEnumerable<string> myList = xs.OrderBy(x => int.Parse(x ?? $"{int.MaxValue}")).ToList();

如果你希望null在数字之后只使用max int值。由于您的值类型为string,因此请使用插值字符串将int.MaxValue作为字符串传递。

当左表达式求值为??时,

null返回右表达式。

插值字符串非常简洁.Net功能:https://msdn.microsoft.com/en-us/library/dn961160.aspx

您还可以在查询中使用string.IsNullOrEmptystring.IsNullOrWhiteSpaceint.TryParse然后int.Parse,具体取决于您的数据,以确保成功解析(因此订购所有元素。