c# - SQLite 按位查询到 EF Core Linq 版本?

标签 c# linq sqlite ef-core-2.0

所以,我比我的 EF Core linq 更了解我的 SQL,所以我的起始查询只是这样的 FromSQL:

var links = context.PortalLinks.FromSql("SELECT * FROM portal_link WHERE grant_bits & {0} AND linkSet_id={1} ORDER BY sortKey",claim,0).ToList();

现在我正在尝试将其转换为正确的 linq 样式查询
var links = context.PortalLinks.Where(x => ((x.GrantBits & claim) != 0) && x.LinkSetId == 0).OrderBy(s => s.SortKey);

我想出了这个,但我不高兴我被迫在隐式 SQL 中显式测试 !=0 ,虽然这个实例是无害的,但我可以想象其他可能有 more 的情况。 .. 有趣... 我可以用 C# 表达的内容与我想用 SQL 表达的内容不匹配。

我想,有没有其他方法可以表达更多惯用的 SQL 查询,以便 Linq 解析不受 c# 自己关于什么构成有效逻辑的假设的约束?

最佳答案

我试图弄清楚你所说的惯用语是什么意思......你可以在查询中使用 C# 6.0 的字符串插值并传递你的 var:

var links = context.PortalLinks.Where(x => ((x.GrantBits & claim) != Int32.Parse($"{myVar}")) && x.LinkSetId == Int32.Parse($"{myVar2}").OrderBy(s => s.SortKey);

请注意,我使用字符串插值 因为没有简单的方法可以用整数实现这个逻辑。

你可以联系到这个post获取另一个信息来源。

编辑:

现在我了解了您的问题,我可以解决您的问题:

您所描述的内容不适用于 native LINQ 功能 然而!

有这个库可以帮助您扩展动态 linq 并实现您的目标:

Dynamic LINQ

关于c# - SQLite 按位查询到 EF Core Linq 版本?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51746811/

相关文章:

c# - 使用标题和行列表创建 View

c# - 在 EF 5.0 中链接 OR 条件

c# - 这是使用 LINQ 创建频率表的最佳方式吗?

java - 更好的 SQLite 损坏检测

c++ - Sqlite C++ ATTACH 内存数据库

c# - 如何将字符串输出到多个文件

c# - 从 C-Sharp/C# 上的 Active Directory 获取用户帐户状态(锁定/解锁)

sqlite - 如果where子句不匹配任何内容,SQL返回结果

c# - 如何设置 DevExpress 网格中单元格的外观?

c# - 获取字典中的第一个匹配项 LINQ