2

データベーススキーマには文字列として定義された列がありますが、金額フィールドを持つデータベースがあります。これは小数です。金額の数値に基づいて値を見つけるために、Linq クエリを実行できるようにしたいと考えています。

CompareTo メソッドの使用に関するthisおよびthisのような質問がありますが、この状況では機能しません。たとえば、データベースに次の請求金額があります。

556
130
1450
410

次のコード:

from t in test
where t.BillAmount.CompareTo("50") > 0
select t

値は返されます556が、他の値はすべて 10 進値の 50 を超えていますが、返されません。

where 行を次のように変更します。

    where t.BillAmount.CompareTo("50") < 0

1301450、および1450それらは「小さい」ため、文字列として 50を返しますが、数値としては返しません。

私はエンティティ フレームワークを使用していないため、次のようなことはできません。

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

また、データベース スキーマを制御できないため、これらの値を変更することもできません。BillAmount フィールドを数値と比較して、その上/下の値を返すにはどうすればよいですか?

4

2 に答える 2

4

String を Decimal にキャストするために Entity Framework を使用する必要はありません。

Convertコールを使用するだけです。

var x = from t in test 
        where Convert.ToDecimal(t.BillAmount) > 50 
        select t

またはラムダ式で:

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 に答える