Entity Framework Core 下使用 SQL 方式取得資料庫的特定欄位資料

李昀峻 2022/01/05 10:11:39
2722

再使用 Entity Framework Core 的時後, 我們需要使用 特別 SQL 來取得特定欄位的資料, .在.Net Core 裡面就有方法可以達成

先準備測試資料

建立資料表

CREATE TABLE Product

(

    [Id] [bigint] IDENTITY(1,1) NOT NULL PRIMARY KEY,

    [Name] [nvarchar](200) NULL,

    [Price] [decimal](18, 2) NOT NULL,

    [Quantity] [int] NOT NULL,

)

GO

存入資料

用 SQL 取的特定欄位資料

 

使用 .Net Core 的 DBContext Database 的

1.使用 ExecuteSqlRaw

使用SqlParameter

Direvtion 使用 Output 來取得資料

var parameter = new SqlParameter("@price", System.Data.SqlDbType.Int);

            parameter.Direction = System.Data.ParameterDirection.Output;

            dbContext.Database.ExecuteSqlRaw("set @price = (select (Price * Quantity) as Price from Product where Name='可樂')", parameter);
            
            var price = (int)parameter.Value;

如果 Name 要使用變數來查詢的話

Direvtion 使用 Intput 來帶入參數

 SqlParameter[] @params =
            {
                new SqlParameter("@price", System.Data.SqlDbType.Int)  
                {
                    Direction = System.Data.ParameterDirection.Output
                },
                new SqlParameter("@name", System.Data.SqlDbType.NVarChar)
                {
                    Value = "可樂",
                    Direction = System.Data.ParameterDirection.Input
                }
            };

            dbContext.Database.ExecuteSqlRaw("set @price = (select (Price * Quantity) as Price from Product where Name='可樂')", @params);
            
            var price = (int)@params[0].Value;

price = 1500

2.使用  ExecuteSqlInterpolated 方法

var price = new SqlParameter
            {
                ParameterName = "@price",
                SqlDbType = System.Data.SqlDbType.Int,
                Direction = System.Data.ParameterDirection.Output
            };

            var name = new SqlParameter
            {
                ParameterName = "@name",
                SqlDbType = System.Data.SqlDbType.NVarChar,
                Value = "可樂",
                Direction = System.Data.ParameterDirection.Input
            };

            dbContext.Database.ExecuteSqlInterpolated($@"set {price} = (select (Price * Quantity) as Price from Product where Name={name})");

            var result = price.Value.ToString();

price 取得 1500

李昀峻