問題タブ [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.
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
変換する必要があるように思えますが、その方法がわかりません。IQueryable
SO については、その主題に近い質問がいくつかありますが、ここに当てはまるものは見つかりませんでした。現在のところ、これは単に EF でサポートされていない可能性があります。
詳細情報:Select
幾何平均の計算を再利用可能にすることがポイントであるため、体全体を何らかの関数に置き換えることはできません。残りの部分は単に再利用できません。データをフェッチして C# で計算するには遅すぎることが示されているため、SQL で実行する必要があります。
いくつかの拡張メソッドのソースを見ると、IQueryable
拡張メソッドの本体がいくつかの式ツリーを構築し、それを に渡すようsource.Provider.Execute
です。私はすでにその部分を管理していると思いますが、上記の問題のために適切にテストできませんでした.