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

LINQ query to sort list of numeric strings with NULLs

我有一个字符串列表:

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

我需要一个 LINQ 查询到 sort/orderby 所以我得到了这个:

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

我不想转换列表。这几乎可以工作:

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

但是 NULL 破坏了它。我敢肯定这很容易,但是 TIA。

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

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

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

正如您希望 nulls 在数字之后一样,在这种情况下仅使用最大 int 值。由于您的值类型是 string 然后使用内插字符串将 int.MaxValue 作为字符串传递。

?? returns 右表达式,当左表达式的计算结果为 null.

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

您还可以在查询中使用 string.IsNullOrEmptystring.IsNullOrWhiteSpaceint.TryParse 然后 int.Parse,以确保成功解析 (并因此排序)所有元素。