2

合計金額を返すショッピングカートシステムに使用されるストアドプロシージャがあり、次のようになります。

ALTER PROCEDURE [dbo].[ShoppingCartGetTotalAmount]
(@CartID char(36))
AS
SELECT ISNULL(SUM(Product.Price * ShoppingCart.Quantity), 0)
FROM ShoppingCart INNER JOIN Product
ON ShoppingCart.ProductID = Product.ProductID
WHERE ShoppingCart.CartID = @CartID

ただし、EntityFrameworkでも同じことをしたいと思います。したがって、次のオプションのいずれかを知る必要があります。
1)EntityFrameWorkで上記のタスクを実行するにはどうすればよいですか。

SELECT ISNULL(SUM(Product.Price * ShoppingCart.Quantity), 0)
    FROM ShoppingCart INNER JOIN Product
    ON ShoppingCart.ProductID = Product.ProductID
    WHERE ShoppingCart.CartID = @CartID

2)またはC#のSQL ISNULL()関数と同等のものは何ですか?
3)またはどうすればこれを達成できますか-> ISNULL(SUM(Product.Price * ShoppingCart.Quantity), 0) 任意の.Netメソッドを使用しますか?

4

3 に答える 3

7

C#にはnull合体演算子-があります??

?? 演算子はnull合体演算子と呼ばれ、null許容値型または参照型のデフォルト値を定義するために使用されます。オペランドがnullでない場合は、左側のオペランドを返します。それ以外の場合は、右のオペランドを返します。

EFはこの演算子を理解し、正しく変換します。

于 2012-09-02T18:24:58.113 に答える
1

データベースから読み取られた値がデータベース内でnullであるかどうかを判別しようとしている場合は、その値をDBNull.Valueと比較する必要があります。

たとえば、次のコードで、oTotalがPrice * Quantityのデータベース結果を保持していると仮定すると、以下はSQLISNULL操作と同等です。

decimal dTotal = (oTotal == DBNull.Value ? 0 : Convert.ToDecimal(oTotal));
于 2012-09-02T18:28:46.673 に答える
0

C#には、null許容型のGetValueOrDefaultである拡張メソッドが存在します。したがって、これも試すことができます。nullが含まれる場合のデフォルト値を返します。

decimal? oTotal = null;
decimal dTotal = oTotal.GetValueOrDefault(0);
于 2012-09-02T18:34:21.193 に答える