编程语言
首页 > 编程语言> > C#string to number,当Parse失败时,TryParse返回true

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