c# - LINQ 可选 where 子句
问题描述
我用过这个例子: Linq with optional WHERE options ...在我的LINQ上制作可选的where子句,但问题是我总是为用户得到空结果。isverified 是一个布尔值,如果主密码正确,则为 true,在这种情况下,我不需要 linq 部分(w.Password == model.Password)
当 isVerified 为真时,我需要我的 linq 看起来像:
var user = _context.Users.SingleOrDefault(w => w.Name == model.Username);
我试过这样的事情:
var user = _context.Users.SingleOrDefault(w => w.Name == model.Username && (!isverified || w.Password == model.Password));
或者
var user = _context.Users.SingleOrDefault(w => w.Name == model.Username && (isverified || w.Password == model.Password));
解决方案
您应该反转isverified
条件:
var user = _context.Users.SingleOrDefault(w => w.Name == model.Username && (isverified || w.Password == model.Password));
但它不会在 sql server 中生成最佳查询计划。
因此,首选方式 - 创建动态查询:
var users = _context.Users.Where(w => w.Name == model.Username);
if (!isverified)
{
users = users.Where(w=>w.Password == model.Password);
}
var user = users.SingleOrDefault();
推荐阅读
- javascript - jQuery $.when 立即触发
- javascript - 如何在运行时自定义 antd 主题?
- reactjs - React Redux Firebase - 您可能忘记从定义组件的文件中导出组件,或者您可能混淆了默认导入和命名导入
- c# - unity gradle build 无法转换 aar
- javascript - object.style.display 在控制台上抛出消息错误
- javascript - array.pop() 的返回值;
- node.js - 带有真实数据库的 Firestore 本地 http:Cloud Firestore 模拟器未运行,因此数据库操作将失败并出现“默认凭据”错误
- go - 如何将 os/exec 输出传递给 gin get
- python - python中从头开始的梯度下降不起作用
- javascript - Firestore:无法获取嵌套文档。为什么?