В Linq-to-Nhibernate кто-нибудь сумел использовать .Contains в предложении where, а также NHibernate.Linq.ToFuture () в том же запросе?(NH 3.x) - PullRequest
4 голосов
/ 04 января 2012

Я всегда получаю «System.Collections.Generic.KeyNotFoundException», в котором говорится «Указанный ключ отсутствует в словаре» всякий раз, когда я пытаюсь использовать .Contains и метод ToFuture () в одном запросе.

Представьте, что DBObject содержит набор свойств, одним из которых является целое число "ID"

List<int> test = new List<int>();
        test.Add(1557);
        test.Add(1558);
        test.Add(1559);

        IEnumerable<DBObject> test2 = getLinqQuerySomehow<DBObject>().Where(x => test.Contains(x.ID)).ToFuture();
        List<DBObject> results = test2.ToList();

Может кто-нибудь воспроизвести это? Кто-нибудь знает о другом способе, кроме функции contains (), чтобы заставить Linq-to-Nhibernate использовать предложение SQL IN для целых чисел в моем списке тестов, а также использовать ToFuture ()?

StackTrace:

в System.Collections.Generic.Dictionary`2.get_Item (ключ TKey) в NHibernate.Param.NamedParameterSpecification.SetEffectiveType (QueryParameters queryParameters) в d: \ CSharp \ NH \ NH \ nhibernate \ src \ NHibernate \ Param \ NamedParameterSpecification.cs: строка 70 в NHibernate.Param.ParametersBackTrackExtensions.ResetEffectiveExpectedType (IEnumerable`1 параметрSpecs, QueryParameters queryParameters) в d: \ CSharp \ NH \ NH \ nhibernate \ src \ NHibernate \ Param \ ParametersBackTrackExtensions.cs: строка 48 в NHibernate.Hql.Ast.ANTLR. : строка 428 в NHibernate.Loader.Loader.CreateSqlCommand (QueryParameters queryParameters, ISessionImplementor session) в d: \ CSharp \ NH \ NH \ nhibernate \ src \ NHibernate \ Loader \ Loader.cs: строка 1649 в NHibernate.Impl.MultiQueryImpl.AggregateQueriesInformation () в d: \ CSharp \ NH \ NH \ nhibernate \ src \ NHibernate \ Impl \ MultiQueryImpl.cs: строка 641 в NHibernate.Impl.MultiQueryImpl.get_Parameters () в d: \ CSharp \ NH \ NH \ nhibernate \ src \ NHibernate \ Impl \ MultiQueryImpl.cs: строка 774 в NHibernate.Impl.MultiQueryImpl.CreateCombinedQueryParameters () в d: \ CSharp \ NH \ NH \ nhibernate \ src \ NHibernate \ Impl \ MultiQueryImpl.cs: строка 754 в NHibernate.Impl.MultiQueryImpl.List () в d: \ CSharp \ NH \ NH \ nhibernate \ src \ NHibernate \ Impl \ MultiQueryImpl.cs: строка 400 в NHibernate.Impl.FutureQueryBatch.GetResultsFrom (множественный доступ IMultiQuery) в d: \ CSharp \ NH \ NH \ nhibernate \ src \ NHibernate \ Impl \ FutureQueryBatch.cs: строка 24 в NHibernate.Impl.FutureBatch`2.GetResults () в d: \ CSharp \ NH \ NH \ nhibernate \ src \ NHibernate \ Impl \ FutureBatch.cs: строка 73 в NHibernate.Impl.FutureBatch`2.get_Results () в d: \ CSharp \ NH \ NH \ nhibernate \ src \ NHibernate \ Impl \ FutureBatch.cs: строка 29 в NHibernate.Impl.FutureBatch`2.GetCurrentResult [TResult] (Int32 currentIndex) в d: \ CSharp \ NH \ NH \ nhibernate \ src \ NHibernate \ Impl \ FutureBatch.cs: строка 79 в NHibernate.Impl.FutureBatch`2.c__DisplayClass4`1.b__3 () в d: \ CSharp \ NH \ NH \ nhibernate \ src \ NHibernate \ Impl \ FutureBatch.cs: строка 63 в NHibernate.Impl.DelayedEnumerator`1.d__0.MoveNext () в d: \ CSharp \ NH \ NH \ nhibernate \ src \ NHibernate \ Impl \ DelayedEnumerator.cs: строка 26 в System.Collections.Generic.List`1..ctor (коллекция IEnumerable`1) в System.Linq.Enumerable.ToList [TSource] (источник IEnumerable`1) в TestProject1.UnitTest1.TestMethod1 () в C: \ checkout \ Библиотечные проекты \ BaseSystemCore \ TestProject1 \ UnitTest1.cs: строка 94

1 Ответ

2 голосов
/ 04 января 2012

Это ошибка.Я нашел это в трекере проблем Nhibernate:

https://nhibernate.jira.com/browse/NH-2897

Редактировать: должно быть исправлено в NH 4.0.

...