pth*_*ker 28 linq entity-framework
我实例化一个上下文,并希望编写一个简单的查询
var result = db.Set.Where(x => x.Id == num).Select(whatever);
Run Code Online (Sandbox Code Playgroud)
而且我无法摆脱"Where"抱怨System.Collections.Generic.IEnumerable和System.Linq.IQueryable之间模糊调用的红色波浪形.System.Linq是专门引用的,System.Collections.Generic不会在项目中的任何位置引用.如何告诉代码我想使用System.Linq.IQueryable?
帕梅拉
Rhy*_*qua 36
此问题通常是由提供给Where语句的表达式中的类型推断失败引起的.正如上面的评论中所提到的,它是100%由lambda中的赋值运算符返回int而不是a bool.
要清楚 - 你在哪里
var result = db.Set.Where(x => x.Id = num).Select(whatever);
Run Code Online (Sandbox Code Playgroud)
你应该有
var result = db.Set.Where(x => x.Id == num).Select(whatever);
Run Code Online (Sandbox Code Playgroud)
另一个好的(也是更常见的)例子是这样的
public class Elem
{
public bool IsSomething {get;set;}
public bool? IsSomethingElse {get;set;}
}
Run Code Online (Sandbox Code Playgroud)
然后,如果你做下面的查询,它看起来在拳头一目了然非常合理的,它会失败,出现"abiguous调用"的,而令人费解的错误编译
IQueryable<Elem> queryable = GetQueryable();
var result = queryable.Where(e => e.IsSomething && e.IsSomethingElse).ToList();
Run Code Online (Sandbox Code Playgroud)
如果你没有在lambda中写这个语句,那么你会得到一个更有意义的错误
"无法将运算符'&&'应用于'System.Nullable <bool>'和'bool'类型的操作数"
哪会立刻告诉你你没有返回布尔值.
知道了。人们似乎不喜欢这个答案,但它解决了我在问题中描述的问题。
db.Set.AsQueryable().Where(...
Run Code Online (Sandbox Code Playgroud)