use*_*195 1 c# linq sql-order-by
var list = new string[] { TextBox1.Text, TextBox2.Text, TextBox3.Text };
list = list.OrderBy(x => int.Parse(x)).ToArray();
Run Code Online (Sandbox Code Playgroud)
任何人都可以建议如何修改上面的代码,以便为每个无法解析为整数的值返回空值?
我想我需要更换Parse与TryParse不知何故?
澄清:
程序接受来自3个不同文本框的3个整数,对它们进行排序并将序列插入数据库.如果输入非整数,我想将其视为空值.
例如,如果TextBox1.Text = "",TextBox2.Text = "45"和TextBox3.Text = "8",插入的序列将是:0,8,45.
但是,我现在认为从排序中排除非整数可能更好,因此对于相同的示例,结果序列将类似于:8,45,N/A.
抱歉无法清楚地解释我的要求.
如果你真的使用LINQ to Objects,我会写一个单独的方法:
public static int? ParseOrNull(string text)
{
int result;
return int.TryParse(text, out result) ? (int?) result : null;
}
Run Code Online (Sandbox Code Playgroud)
然后:
list = list.OrderBy(x => ParseOrNull(x)).ToArray();
Run Code Online (Sandbox Code Playgroud)
这将处理文本值,这些值是对非数字的真实字符串引用或空引用.您可能想要重载ParseOrNull以接受IFormatProvider.
但这只是一个可以为空的int 排序.如果你想要无效的值替换为null,但其他值保留为字符串(按数值排序)我怀疑你想要更像的东西:
var result = list.Select(x => new { Text = x, Numeric = ParseOrNull(x) })
.OrderBy(pair => pair.Numeric)
.Select(pair => pair.Numeric.HasValue ? pair.Text : null)
.ToArray();
Run Code Online (Sandbox Code Playgroud)
如果这些都不符合您的要求,请澄清您的要求.
请注意,这些都不适用于LINQ to SQL或Entity Framework,它们无法将您的方法转换为SQL.