C#字符串转数字,TryParse returns Parse失败时为真

C# string to number, TryParse returns true when Parse fails

我的数据库(SQL 服务器)中有一列将平均值存储为 varchar

值并不总是有效的数字,它可以是这样的:0125.5.44.06.5.21428571428571428571428571428571428571Xfail,或者只是空文本。

当用linq赋值变量时,我想显示:

代码:

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
}

但是解析失败。

当用任何硬编码值(例如 double.Parse("3.3")替换 double.Parse(a.moyenne.Trim() 时,它工作正常。

所以 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.

你为什么不在第二个也使用 TryParse?

Result = double.TryParse(a.moyenne.Trim(), NumberStyles. Number, CultureInfo.InvariantCulture, out note) ? (double.TryParse(a.moyenne.Trim(), NumberStyles.Number, CultureInfo.InvariantCulture) < 4 ? "failed" : "success") : a.moyenne

试试看。

你不能在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
}