[英]How to compare a string column to a number (as a decimal) in Linq
我有一個帶有金額字段的數據庫-它是一個十進制,盡管數據庫模式將列定義為字符串。 我希望能夠運行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字段與數字進行比較並返回上/下的值?
您不必使用實體框架將字符串轉換為十進制。
您可以簡單地使用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);
這是使用let
的好地方,它將使您擁有一個臨時變量作為LINQ查詢的一部分。 這樣的事情應該起作用:
from t in test
let amount = Convert.ToDecimal(t.BillAmount)
where amount > 50
select t
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.