所以,我比我的 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/