我有一个带有金额字段的数据库 - 它是一个小数,尽管数据库模式将列定义为字符串。我希望能够运行Linq查询以根据金额的数字查找值。
有this和this等问题讨论使用CompareTo方法,但在这种情况下不起作用。例如,我在数据库中有以下账单金额:
556
130
1450
410
以下代码:
from t in test
where t.BillAmount.CompareTo("50") > 0
select t
将返回值556
,但不会返回任何其他值,即使它们都高于50的十进制值。
将where行更改为:
where t.BillAmount.CompareTo("50") < 0
将返回130
,1450
和1450
,因为它们是“less”,然后是50作为字符串,但不是数字。
我没有使用实体框架,所以我做不了类似的事情:
where SqlFunctions.StringConvert((double)t.BillAmount).Trim() > 50
我也无法控制数据库架构,因此无法更改这些值。如何将BillAmount字段与数字进行比较并返回其上方/下方的值?
答案 0 :(得分:4)
您不必使用Entity Framework将String强制转换为Decimal。
您只需使用Convert
电话。
var x = from t in test
where Convert.ToDecimal(t.BillAmount) > 50
select t
或使用Lambda表达式:
var x = test.where(p=>Convert.ToDecimal(p.BillAmount) > 50);
答案 1 :(得分:2)
这是一个使用let
的好地方,它可以让你有一个临时变量作为LINQ查询的一部分。这样的事情应该有效:
from t in test
let amount = Convert.ToDecimal(t.BillAmount)
where amount > 50
select t