nHhibernateを使用してメモリコレクションによってdbテーブル(コンポジットキーId1とId2)をフィルタリングします。NHibernate QueryOverフィルターbyコレクション
class Item{ int Id1; int Id2; }
var collection = new List<Item>();
var list = _session
.QueryOver<MyDbTable>()
.Where(x => collection.Any(y => y.Id1 == x.Id1 && y.Id2 == x.Id2))
.List();
私はこれを行うことによって取得エラー「が認識されないメソッドの呼び出し:System.Linq.Enumerable:ブールどれ」です。 FirstOrDefaultメソッドを使用して結果をnullと比較しようとしましたが、機能しません。
私のバージョンは動作しないと私は同意しますが、とにかく別の解決策を探しています。コレクションに100の要素のようなまともなサイズがある場合、またはdisjunctionクエリによって生成されたSQLのサイズが1000であることを認識していますか? –
こんにちは@AlexeyZimarev、SQLクエリの長さの上限は65,536 *ネットワークパケットサイズ(デフォルトは4KB)です。 2100パラメータの制限は、SQLクエリの長さよりも前になります。たとえば、2100を超える要素を持つコレクションを使用してIsInを使用することはできません。これは私のソリューションの特有の問題ではなく、このケースでは最小限のパラメータを使用しています。私はandsとorsのクエリが長くなることに同意しますが、パラメータの数は増えません。もちろん、必要に応じてHQLを使用することもできます。 –