如何将带多个Where条件的SQL语句转换为可正常运行的Linq查询?
错误原因&修正方案
你代码里有三个核心问题:
- C#中相等判断必须用
==,你写的单等号=是赋值运算符,语法不合法,所以触发&&附近的报错 - 提前调用
ToList()会把整张Accesses表全量加载到内存再过滤,数据量大时性能极差,建议直接在EF的DbSet上执行查询,让过滤逻辑在数据库层面执行 - 你要取的是
AccessName字段,select后的属性名拼写错误,同时注意如果IsValid是数据库的bit类型,对应C#的bool,直接判断真值即可,不用转成等于1的判断
正确代码
查询语法写法
// IsValid为bool类型时用这个 var accessName = (from acc in _context.Accesses where acc.IsValid && acc.AccessID == 1 select acc.AccessName).FirstOrDefault(); // IsValid为int类型时用这个 var accessName = (from acc in _context.Accesses where acc.IsValid == 1 && acc.AccessID == 1 select acc.AccessName).FirstOrDefault();
方法语法写法(更常用)
var accessName = _context.Accesses .Where(acc => acc.IsValid && acc.AccessID == 1) .Select(acc => acc.AccessName) .FirstOrDefault();
如果确定查询结果唯一,也可以把FirstOrDefault换成SingleOrDefault,查询不到结果时会返回对应类型的默认值(字符串类型为null)。
内容的提问来源于stack exchange,提问作者user16447210
相关产品推荐
相关产品推荐

