如何将字符串列与Linq中的数字(作为小数)进行比较

时间:2011-10-19 22:09:16

标签: c# .net linq compareto

我有一个带有金额字段的数据库 - 它是一个小数,尽管数据库模式将列定义为字符串。我希望能够运行Linq查询以根据金额的数字查找值。

thisthis等问题讨论使用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

将返回13014501450,因为它们是“less”,然后是50作为字符串,但不是数字。

我没有使用实体框架,所以我做不了类似的事情:

where SqlFunctions.StringConvert((double)t.BillAmount).Trim() > 50

我也无法控制数据库架构,因此无法更改这些值。如何将BillAmount字段与数字进行比较并返回其上方/下方的值?

2 个答案:

答案 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