C#string to number,当Parse失败时,TryParse返回true
作者:互联网
我的数据库(SQL Server)中有一列将平均值存储为varchar.
值并不总是有效数字,它可以是:0,12,5.5,.4,4.0,6.,5.21428571428571428571428571428571428571,X,失败或只是空文本.
使用linq分配变量时,我想显示:
>如果平均值是有效数字且> = 4则成功
>如果平均值是有效数字且< 4
>如果平均值不是有效数字,则为原始文本
代码 :
myresults = myDataContext.myDbFunction()
double note;
from a in myresults
select new MainReportModel()
{
Id = a.id,
Lastname = a.nom,
Firstname = a.prenom,
Average = a.moyenne,
Result = double.TryParse(a.moyenne.Trim(), NumberStyles.Number, CultureInfo.InvariantCulture, out note) ? (double.Parse(a.moyenne.Trim(), NumberStyles.Number, CultureInfo.InvariantCulture) < 4 ? "failed" : "success") : a.moyenne
}
但是Parse失败了.
当用任何硬编码值替换double.Parse(a.moyenne.Trim()时(例如double.Parse(“3.3”),它可以正常工作.
所以似乎a.moyenne.Trim()的一个值导致Parse失败.
如果TryParse返回true,它怎么会失败?
编辑:这是错误消息:
Could not translate expression 'value(MyProjectWeb.Models.MyProjectDataContext).myDbFunction().Select(a => new MainReportModel() {Id = a.id, Lastname = a.nom, Firstname = a.prenom, Average = a.moyenne, Result = IIF(TryParse(a.moyenne.Trim(), Number, Invoke(value(System.Func`1[System.Globalization.CultureInfo])), Invoke(value(System.Func`1[System.Double]))), IIF((Parse(a.moyenne.Trim(), Number, Invoke(value(System.Func`1[System.Globalization.CultureInfo]))) < 4), Invoke(value(System.Func`1[System.String])), "success"), ((a.moyenne) + "</span>"))})' into SQL and could not treat it as a local expression.
解决方法:
你不能在Sql服务器上执行TryParse,但是如果你没有做进一步的选择标准,那么你可以尝试从Sql中提取数据,然后在客户端上进行解析.
例如
myresults = myDataContext.myDbFunction()
double note;
var list =(from a in myresults
select new
{
a.id,
a.nom,
a.prenom,
a.moyenne,
}).ToList();
var finalResults = (from a in list
select new MainReportModel()
{
Id = a.id,
Lastname = a.nom,
Firstname = a.prenom,
Average = a.moyenne,
Result = double.TryParse(a.moyenne.Trim(), NumberStyles.Number, CultureInfo.InvariantCulture, out note) ? (double.Parse(a.moyenne.Trim(), NumberStyles.Number, CultureInfo.InvariantCulture) < 4 ? "failed" : "success") : a.moyenne
}
标签:c,linq,number-formatting,linq-to-sql,tryparse 来源: https://codeday.me/bug/20190708/1401095.html