31

コンテキストをインスタンス化し、簡単なクエリを書きたいと思います:

var result = db.Set.Where(x => x.Id == num).Select(whatever);

Whereの間のあいまいな呼び出しについて不平を言うと、赤い波線を取り除くことができず、具体的に参照され、プロジェクトのどこにも参照されていません。使用したいコードをどのように伝えることができますか?System.Collections.Generic.IEnumerableSystem.Linq.IQueryable. System.LinqSystem.Collections.GenericSystem.Linq.IQueryable

4

5 に答える 5

41

通常、この問題は、Where ステートメントに指定された式からの型推定の失敗によって発生します。上記のコメントで述べたように、ラムダの代入演算子intが a ではなくan を返すことが100%原因boolです。

明確にするために - あなたが持っている場所

var result = db.Set.Where(x => x.Id = num).Select(whatever);

あなたが持っている必要があります

var result = db.Set.Where(x => x.Id == num).Select(whatever);

これのもう1つの良い(そしてより一般的な)例は、次のようなものです

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' のオペランドに演算子 '&&' を適用できません」

ブール値を返せていないことがすぐにわかります。

于 2014-04-16T04:13:52.833 に答える
2

とった。人々はこの答えを気に入っていないようですが、質問で説明した問題は解決しました。

db.Set.AsQueryable().Where(...
于 2013-11-08T22:36:17.427 に答える