Entity Framework Core 下使用 SQL 方式取得資料庫的特定欄位資料
2022/01/05 10:11:39
0
3625
再使用 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