2

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

这样这样的问题谈论使用 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因为它们“小于”然后 50 作为字符串,但不是作为数字。

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

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

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

4

2 回答 2

4

您不必使用实体框架将字符串转换为十进制。

您可以简单地使用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);
于 2011-10-19T22:25:47.947 回答
2

这是一个使用的好地方let,它可以让你有一个临时变量作为 LINQ 查询的一部分。像这样的东西应该工作:

from t in test
let amount = Convert.ToDecimal(t.BillAmount)
where amount > 50
select t
于 2011-10-19T22:15:42.483 回答