簡體   English   中英

如何在 C# 實體框架中獲取 SQL 查詢的結果?

[英]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();

返回此錯誤:

截屏

您正在對查詢中的某些列執行聚合,並對這些聚合的結果進行了別名。 因此,返回的列( MeghksmMablksm等)與您的 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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM