首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >实体框架核心Linq查询无法转换为正确的SQL语句

问实体框架核心Linq查询无法转换为正确的SQL语句
EN

Stack Overflow用户
提问于 2020-04-14 11:43:37
回答 1查看 472关注 0票数 0

因此,我正在调试使用Entity Framework Core 2.1.14的应用程序。我首先通过脚手架从数据库创建了实体。数据库为Oracle 5.7.29,EF Core的MySQL数据提供程序为Oracle的MySql.Data.EntityFrameworkCore 8.0.19。

示例:一个简单的Linq查询应该在后端创建一个合适的SQL语句。然而,事实并非如此。"Inactive“是Byte?

代码语言:javascript
复制
Dim associates = (From a In DatabaseContext.Associate
                  Where a.Inactive = 0
                  Select a.AssociateId).ToList()

这个简单的Linq查询返回:SELECT `a`.`Inactive`, `a`.`AssociateID` FROM `associate` AS `a`。因此,基本上它会下载所有的关联,并在内存中查找"where“并返回值。我知道根据文档,有些查询可能很复杂,无法翻译,但这是最简单的查询。是否是因为非活动列可以为空?有些事情是可怕的,不是正确的。

仅供参考: EF Core位于C#类库中。VB代码在另一个项目中,即引用类库的VB。

EN

回答 1

Stack Overflow用户

发布于 2020-04-15 02:01:09

嗯,似乎答案是在VB中使查询更具体。我猜C#类库和VB项目之间的查询转换似乎是个问题。

代码语言:javascript
复制
Dim associates = (From a In DatabaseContext.Associate
                  Where a.Inactive.Value = Convert.ToByte(0)
                  Select a.AssociateId).ToList()

这提供了正确的查询:

代码语言:javascript
复制
SELECT `a`.`AssociateID`
FROM `associate` AS `a`
WHERE `a`.`Inactive` = 0

非常奇怪的是,在C#中,你不需要检查.Value并将0转换为字节,但在VB中,我必须这样做,没有其他方法可以让它工作。感谢所有想要帮助我们的人。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/61200375

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档