繁体   English   中英

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

[英]Entity Framework SQL query not returning results

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

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

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(对象)

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

表示从System.Data.Entity.DbContext创建的实体的SQL查询,并使用该上下文中的连接执行。 此类的实例是从实体类型的System.Data.Entity.DbSet实例获取的。 创建此对象时不执行查询; 每次枚举时都会执行它,例如使用foreach。 使用System.Data.Entity.DbContext.Database创建非实体的SQL查询。 有关此类的非泛型版本,请参阅System.Data.Entity.Infrastructure.DbSqlQuery。

请注意线条

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

这意味着你必须迭代它才能得到结果。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM