每当我尝试在一个查询中使用 .Contains 和 ToFuture() 方法时,我总是得到一个“System.Collections.Generic.KeyNotFoundException”,上面写着“字典中不存在给定的键”。
想象一下 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()?
堆栈跟踪:
在 System.Collections.Generic.Dictionary`2.get_Item(TKey key) 在 NHibernate.Param.NamedParameterSpecification.SetEffectiveType(QueryParameters queryParameters) 在 d:\CSharp\NH\NH\nhibernate\src\NHibernate\Param\NamedParameterSpecification.cs: d:\CSharp\NH\NH\nhibernate\src\NHibernate\Param\ParametersBackTrackExtensions.cs 中 NHibernate.Param.ParametersBackTrackExtensions.ResetEffectiveExpectedType(IEnumerable`1 parameterSpecs, QueryParameters queryParameters) 的第 70 行:NHibernate.Hql.Ast 的第 48 行。 ANTLR.Loader.QueryLoader.ResetEffectiveExpectedType(IEnumerable`1 parameterSpecs, QueryParameters queryParameters) in d:\CSharp\NH\NH\nhibernate\src\NHibernate\Hql\Ast\ANTLR\Loader\QueryLoader.cs: NHibernate.Loader 的第 428 行.Loader.CreateSqlCommand(QueryParameters queryParameters, ISessionImplementor session) in d:\CSharp\NH\NH\nhibernate\src\NHibernate\Loader\Loader.cs: d:\CSharp\NH\NH\nhibernate\src\NHibernate\Impl\MultiQueryImpl 中 NHibernate.Impl.MultiQueryImpl.AggregateQueriesInformation() 的第 1649 行.cs:NHibernate.Impl.MultiQueryImpl.get_Parameters() 中的 d:\CSharp\NH\NH\nhibernate\src\NHibernate\Impl\MultiQueryImpl.cs:第 641 行:NHibernate.Impl.MultiQueryImpl.CreateCombinedQueryParameters() 中的第 774 行d:\CSharp\NH\NH\nhibernate\src\NHibernate\Impl\MultiQueryImpl.cs: d:\CSharp\NH\NH\nhibernate\src\NHibernate\Impl 中 NHibernate.Impl.MultiQueryImpl.List() 的第 754 行\MultiQueryImpl.cs:NHibernate.Impl.FutureQueryBatch.GetResultsFrom(IMultiQuery multiApproach) 在 d:\CSharp\NH\NH\nhibernate\src\NHibernate\Impl\FutureQueryBatch.cs 的第 400 行:NHibernate.Impl.FutureBatch 的第 24 行` 2.GetResults() 在 d:\CSharp\NH\NH\nhibernate\src\NHibernate\Impl\FutureBatch.cs:第 73 行在 NHibernate.Impl.FutureBatch`2.get_Results() in d:\CSharp\NH\NH\nhibernate\src\NHibernate\Impl \FutureBatch.cs:NHibernate.Impl.FutureBatch 的第 29 行`2.GetCurrentResult[TResult](Int32 currentIndex) in d:\CSharp\NH\NH\nhibernate\src\NHibernate\Impl\FutureBatch.cs:NHibernate 的第 79 行.Impl.FutureBatch`2.c__DisplayClass4`1.b__3() in d:\CSharp\NH\NH\nhibernate\src\NHibernate\Impl\FutureBatch.cs: NHibernate.Impl.DelayedEnumerator`1.d__0.MoveNext 的第 63 行() 在 d:\CSharp\NH\NH\nhibernate\src\NHibernate\Impl\DelayedEnumerator.cs:System.Collections.Generic.List`1..ctor(IEnumerable`1 集合) 中 System.Linq 的第 26 行。 C 中 TestProject1.UnitTest1.TestMethod1() 处的 Enumerable.ToList[TSource](IEnumerable`1 source):\checkout\Library Projects\BaseSystemCore\TestProject1\UnitTest1.cs:第 94 行