此问题通常是由提供给 Where 语句的表达式中的类型推断失败引起的。正如上面的评论中提到的,它 100% 是由 lambda 中的赋值运算符返回 anint
而不是 a 引起的bool
。
要清楚 - 你在哪里
var result = db.Set.Where(x => x.Id = num).Select(whatever);
你应该有
var result = db.Set.Where(x => x.Id == num).Select(whatever);
另一个好的(也是更常见的)例子是这样的
public class Elem
{
public bool IsSomething {get;set;}
public bool? IsSomethingElse {get;set;}
}
那么如果你做下面这个乍一看很合理的查询,它就会编译失败,出现“模糊调用”这个相当令人费解的错误
IQueryable<Elem> queryable = GetQueryable();
var result = queryable.Where(e => e.IsSomething && e.IsSomethingElse).ToList();
如果您没有在 lambda 中编写此语句,那么您会得到一个更有意义的错误
“不能将运算符 '&&' 应用于 'System.Nullable<bool>' 和 'bool' 类型的操作数”
这会立即告诉您您没有返回布尔值。