【问题标题】:How do I get the result of SQL Query in C# Entity Framework?如何在 C# Entity Framework 中获取 SQL 查询的结果?
【发布时间】:2021-05-18 04:17:38
【问题描述】:

我将 WPF、C#、Entity Framework 数据库与 SQL Server 数据库一起使用。

我可以在 SQL Server 中成功执行此查询:

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();

返回此错误:

【问题讨论】:

标签: c# sql entity-framework


【解决方案1】:

您正在对查询中的某些列执行聚合,并为这些聚合的结果设置了别名。因此,返回的列(MeghksmMablksm 等)与您的 C# 类 INVO_LST 所代表的数据库表 INVO_LST 中的列不同。因此,Entity Framework 无法将返回的结果映射到您在 dbms.Database.SqlQuery&lt;INVO_LST&gt; 调用中指定的类。

您需要创建一个 EF 可以映射到查询结果的类:

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 注入的评论...)

【讨论】:

    【解决方案2】:

    首先你应该阅读sql注入。您不应在查询中使用“TextB_Number.Text”,因为它会降低数据安全性。 其次,dbms.Database.SqlQuery&lt;INVO_LST&gt;SqLQuery 需要一个类,该类可以匹配将在查询结果中出现的列的类型和名称。 所以你应该使用以下方法。

    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,因为聚合函数Sum也可以产生Decimal值。

    【讨论】:

      猜你喜欢
      • 2013-07-15
      • 1970-01-01
      • 2021-07-12
      • 1970-01-01
      • 2011-09-19
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多