コンテキストをインスタンス化し、簡単なクエリを作成したい:
var result = db.Set.Where(x => x.Id == num).Select(whatever);
そして、 System.Collections.Generic.IEnumerable
とSystem.Linq.IQueryable.
間のあいまいな呼び出しについて文句を言っているWhere
下で赤の波線を取り除くことはできませんSystem.Linq.IQueryable.
System.Linq
は特に参照され、 System.Collections.Generic
はプロジェクト内のどこでも参照されません。 System.Linq.IQueryable
を使用することをコードに伝えるにはどうすればよいですか?
この問題は通常、Whereステートメントに提供された式からの型推論の失敗によって引き起こされます。上記のコメントで述べたように、これはラムダの代入演算子がbool
代わりにint
を返すことによって引き起こされた100%です。
明確にするために - あなたがいるところ
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'のオペランドに適用できません。"
これはすぐにあなたがブール値を返すことに失敗していることをあなたに伝えます。