問題タブ [igrouping]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票する
0 に答える
92 参照

c# - IGrouping でのカスタム IQueryable 拡張メソッドの呼び出し

私はこのようなコードを持っています:

幾何平均を計算する場所が他にもいくつかあるので、それを拡張メソッドに入れたいので、コメントの後の行は のようになりますValue = group.GeometricMean(a => a.Value)

  • に通常の拡張メソッドを記述するとIEnumerable<T>、Entity Framework はそれをクエリに変換できないと文句を言います。

  • で動作するメソッドを書くIQueryable<T>group、実際には ではIQueryable<T>なく であることがわかりますIGrouping<TKey, T>

  • として呼び出そうとするとValue = group.AsQueryable().GeometricMean(a => a.Value)ArgumentException「IGrouping 型の式は、IQueryable 型のパラメーター (パラメーター arg0) には使用できません」というメッセージが表示されます。

拡張メソッドが機能するには、どうにかしてそれをIGrouping変換する必要があるように思えますが、その方法がわかりません。IQueryableSO については、その主題に近い質問がいくつかありますが、ここに当てはまるものは見つかりませんでした。現在のところ、これは単に EF でサポートされていない可能性があります。

詳細情報:Select幾何平均の計算を再利用可能にすることがポイントであるため、体全体を何らかの関数に置き換えることはできません。残りの部分は単に再利用できません。データをフェッチして C# で計算するには遅すぎることが示されているため、SQL で実行する必要があります。

いくつかの拡張メソッドのソースを見ると、IQueryable拡張メソッドの本体がいくつかの式ツリーを構築し、それを に渡すようsource.Provider.Executeです。私はすでにその部分を管理していると思いますが、上記の問題のために適切にテストできませんでした.