アプリケーションに次の LINQ クエリがあります。データ ソースは、List<Borehole>
テスト目的でメモリ内に構築されます。
var lq = from p in data
group p by p.CostCenter into g
select new { CostCenter = g.Key,
AverageDepth = g.Average(p => p.OriginalDepth),
NullDepthCount = g.Count(p => p.OriginalDepth == null) };
それは完全に実行され、望ましい選択結果が得られます。ただし、LINQPad で次のクエリを実行すると、次のようになりますInvalidOperationException
。
var lq = from p in Boreholes
group p by p.CostCenter into g
select new { CostCenter = g.Key,
AverageDepth = g.Average(p => p.OriginalDepth),
NullDepthCount = g.Count(p => p.OriginalDepth == null) };
ここで、データ ソースは SQLite データベース内のテーブルであり、IQ 2.0.5.0 LINQPad ドライバーを使用して LINQPad にリンクされています。エラーメッセージは次のとおりです。
No generic method 'Where' on type 'System.Linq.Queryable' is compatible with the supplied type arguments and arguments. No type arguments should be provided if the method is non-generic.
を使用してLINQPad v4.42.01
います。アプリケーション サンプルは、対 コンパイルされ.NET Framework 4 Client Profile
ます。
OriginalDepth
プロパティのタイプはですdouble?
。
クエリが LINQPad で機能しないのはなぜですか / アプリケーションで機能するのはなぜですか?
LINQPad クエリを修正するにはどうすればよいですか?
アップデート
Borehole
ダミークラスの定義とダミーdata
リストの作成を含むアプリケーション コードをコピーして LINQPad に貼り付けると、問題なく動作します。したがって、問題は、LINQPad がアプリケーションで機能するクエリ形式を拒否することではありません。
問題は次のようになります:なぜオブジェクトに対して使用できるのにg.Count(p => p.OriginalDepth == null)
、List<Borehole>
LINQPad によってアクセスされる SQLite テーブルに対して同じクエリを実行すると、InvalidOperationException
上記のようになりますか?
更新 2
g.count
クエリの一部の述語が何であるかは関係ありません。次のコードを SQLite データベース テーブルに対して実行すると、同じエラーが発生します。
var lq2 = from p in Boreholes
group p by p.CostCenter into g
select new { NullDepthCount = g.Count(p => true )};