[英]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.