C#字符串转数字,TryParse returns Parse失败时为真
C# string to number, TryParse returns true when Parse fails
我的数据库(SQL 服务器)中有一列将平均值存储为 varchar。
值并不总是有效的数字,它可以是这样的:0
、12
、5.5
、.4
、4.0
、6.
、5.21428571428571428571428571428571428571
、X
、fail
,或者只是空文本。
当用linq赋值变量时,我想显示:
success
如果平均值是有效数字且 >= 4
failed
如果平均值是有效数字并且 < 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
}
但是解析失败。
当用任何硬编码值(例如 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
}
我的数据库(SQL 服务器)中有一列将平均值存储为 varchar。
值并不总是有效的数字,它可以是这样的:0
、12
、5.5
、.4
、4.0
、6.
、5.21428571428571428571428571428571428571
、X
、fail
,或者只是空文本。
当用linq赋值变量时,我想显示:
success
如果平均值是有效数字且 >= 4failed
如果平均值是有效数字并且 < 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
}
但是解析失败。
当用任何硬编码值(例如 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
}