【发布时间】:2015-04-25 15:38:01
【问题描述】:
我的数据库 (SQL Server) 中有一个列将平均值存储为 varchar。
值并不总是有效的数字,它可以是:0、12、5.5、.4、4.0、6.、5.21428571428571428571428571428571428571、X、@987654329 @,或者只是空文本。
当用 linq 分配变量时,我想显示:
-
success如果平均值是有效数字并且 >= 4 -
failed如果平均值是有效数字并且 - 如果平均值不是有效数字,则为原始文本
代码:
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(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.
【问题讨论】:
-
您是否尝试过调试并查看值是多少?
-
我没想到会发生这种情况。你能粘贴引发异常的输入字符串吗?
-
如何遍历数据并一一尝试,直到遇到导致问题的值?
-
另外,解析两次,你不能做这样的事情吗?
double.TryParse(a.moyenne.Trim(), NumberStyles.Number, CultureInfo.InvariantCulture, out note) ? note < 4 ? "fail" : "success" : a.moyenne; -
@GrawCube 调试不允许我一一看到记录。我已经尝试过使用
note变量,但它始终是0。当我能够重新编译我的代码时,我将使用错误消息更新我的帖子。
标签: c# linq linq-to-sql number-formatting tryparse