コンテキストをインスタンス化し、簡単なクエリを記述したいと思います。
var result = db.Set.Where(x => x.Id == num).Select(whatever);
とWhere
の間のあいまいな呼び出しについて警告するの下の赤い波線を取り除くことができません。は明示的に参照されていますが、 はプロジェクトのどこにも参照されていません。 を使用するようにコードに指示するにはどうすればよいでしょうか?System.Collections.Generic.IEnumerable
System.Linq.IQueryable.
System.Linq
System.Collections.Generic
System.Linq.IQueryable
ベストアンサー1
この問題は通常、Where ステートメントに指定された式での型推論の失敗によって発生します。上記のコメントで述べたように、ラムダの代入演算子がint
ではなくを返すことが 100% の原因です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();
この文をラムダ式の中に書いていなければ、もっと意味のあるエラーが発生します。
「演算子 '&&' を 'System.Nullable<bool>' および 'bool' 型のオペランドに適用できません」
これにより、ブール値を返すことができていないことがすぐにわかります。