[英]How do I get the result of SQL Query in C# Entity Framework?
我正在使用 WPF、C#、Entity Framework 數據庫,首先使用 SQL 服務器數據庫。
我可以在 SQL 服務器中成功執行此查詢:
SELECT
SUM(MEGHk) AS Meghksm,
SUM(MABL_K) AS Mablksm,
SUM(N_MOIN) AS N_MOINSM,
SUM(IMBAA) AS IMBAAsm
FROM
INVO_LST
WHERE
(TAG = 2) AND (NUMBER = 4)
在 C# 代碼中:
var quer_Sumfactor5 = dbms.Database.SqlQuery<INVO_LST>("SELECT SUM(MEGHk) AS Meghksm, SUM(MABL_K) AS Mablksm, SUM(N_MOIN) AS N_MOINSM, SUM(IMBAA) AS IMBAAsm FROM INVO_LST WHERE(TAG = 2) AND (NUMBER = " + TextB_Number.Text + ")").ToList();
返回此錯誤:
您正在對查詢中的某些列執行聚合,並對這些聚合的結果進行了別名。 因此,返回的列( Meghksm
、 Mablksm
等)與您的 C# class INVO_LST
表示的數據庫表INVO_LST
中的列不同。 所以實體框架不能 map 將結果返回到您在dbms.Database.SqlQuery<INVO_LST>
調用中指定的 class 。
您需要創建一個 class EF 可以 map 到查詢結果:
public class INVO_LST_SUM
{
public decimal Meghksm {get; set;}
public decimal Mablksm {get; set;}
public decimal N_MOINSM {get; set;}
public decimal IMBAAsm {get; set;}
}
然后你可以調用:
var quer_Sumfactor5 = dbms.Database.SqlQuery<INVO_LST_SUM>("SELECT SUM(MEGHk) AS Meghksm, SUM(MABL_K) AS Mablksm, SUM(N_MOIN) AS N_MOINSM, SUM(IMBAA) AS IMBAAsm FROM INVO_LST WHERE(TAG = 2) AND (NUMBER = " + TextB_Number.Text + ")").ToList();
(雖然請仔細注意@Liam 的評論關於 SQL 注射......)
首先,您應該閱讀 sql 注入。 您不應在查詢中使用“TextB_Number.Text”,因為它會降低數據安全性。 其次, dbms.Database.SqlQuery<INVO_LST>
SqLQuery 需要一個 class 可以匹配查詢結果中的列的類型和名稱。 所以你應該使用以下方法。
public class INVO_LST_SUM
{
public decimal Meghksm {get; set;}
public decimal Mablksm {get; set;}
public decimal N_MOINSM {get; set;}
public decimal IMBAAsm {get; set;}
}
和
var quer_Sumfactor5 = dbms.Database.SqlQuery<INVO_LST_SUM>("SELECT SUM(MEGHk) AS Meghksm, SUM(MABL_K) AS Mablksm, SUM(N_MOIN) AS N_MOINSM, SUM(IMBAA) AS IMBAAsm FROM INVO_LST WHERE(TAG = 2) AND (NUMBER = " + TextB_Number.Text + ")").ToList();
使用十進制而不是 int,因為聚合 function 總和也可以導致十進制值。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.