簡體   English   中英

如何在Linq中將字符串列與數字(以十進制表示)進行比較

[英]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

將返回13014501450為那些“少”,那么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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM