实体框架 SQL 查询不返回结果



我正在使用实体框架数据库第一个模型,但在查询数据库时遇到问题。

我正在尝试使用以下代码:

var ctx = new dbEntities();
var description = ctx.DEPARTMENTs.SqlQuery("SELECT DESCRIPTION FROM DEPARTMENT WHERE DEPARTMENT='FINANCE'");
System.Diagnostics.Debug.WriteLine(description);

我可以在调试日志中看到DEPARTMENTs表的结果表,但由于某种原因,SQL 查询只是在控制台中返回我而不是执行查询,有人知道为什么吗?

SELECT DESCRIPTION FROM DEPARTMENT WHERE DEPARTMENT='FINANCE'

要使查询针对提供程序执行,您必须使用从IEnumerable派生的任何扩展,即 ToList()First()FirstOrDefault()

现在你必须考虑一些事情。您的查询可能会返回什么?数据列表还是单个数据?或者即使找到了匹配项列表,您也只想要一个?

从您的查询语法来看,我认为您应该这样做:

var ctx = new dbEntities();
var dep = ctx.DEPARTMENTs
             .SqlQuery("SELECT * FROM DEPARTMENT WHERE DEPARTMENT='FINANCE'")
             .FirstOrDefault();
if(dep!=null)
{
    var description = department.Description;
}

或者,您也可以这样做(我更喜欢):

var description = ctx.DEPARTMENTs.Where(s=>s.Department.ToUpper() =="FINANCE")
                     .Select(s=>s.Description)
                     .FirstOrDefault();

尝试:

var description = ctx.DEPARTMENTs.SqlQuery<string>("SELECT DESCRIPTION FROM DEPARTMENT WHERE DEPARTMENT='FINANCE'").ToList();

编辑:原始SQL查询http://msdn.microsoft.com/en-us/data/jj592907.aspx

请注意,与 LINQ 查询一样,在枚举结果之前不会执行查询 — 在上面的示例中,这是通过调用 ToList 来完成的。

System.Diagnostics.Debug.WriteLine(Object) 将对象的 ToString 方法的值写入 Listeners 集合中的跟踪侦听器。Debug.WriteLine(Object)

SqlQuery返回DbSqlQuery<TEntity>对象。在您的情况下,它可能DbSqlQuery<DEPARTMENTs>.正如文档所说

表示从 System.Data.Entity.DbContext,并使用来自 那个背景。 此类的实例从 实体类型的 System.Data.Entity.DbSet 实例。这 创建此对象时不执行查询;它执行每个 枚举时间,例如使用 foreach。 SQL 查询 非实体是使用 System.Data.Entity.DbContext.Database. 参见 System.Data.Entity.Infrastructure.DbSqlQuery for a nongeneric version 这个类的。

请注意行

创建此对象时不执行查询;执行查询 每次枚举时,例如通过使用foreach。

这意味着您必须迭代它才能获得结果。

最新更新