在Linq-to-Nhibernate中,有没有人设法在一个where子句中使用.Contains,并在同一个查询中使用NHibernate.Linq.ToFuture()? (NH 3.x)

时间:2012-01-04 01:12:22

标签: linq-to-nhibernate nhibernate-3

每当我尝试在一个查询中使用.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)   位于d:\ CSharp \ NH \ NH \ nhibernate \ src \ NHibernate \ Param \ NamedParameterSpecification.cs中的NHibernate.Param.NamedParameterSpecification.SetEffectiveType(QueryParameters queryParameters):第70行   at NHibernate.Param.ParametersBackTrackExtensions.ResetEffectiveExpectedType(IEnumerable`1 parameterSpecs,QueryParameters queryParameters)在d:\ CSharp \ NH \ NH \ nhibernate \ src \ NHibernate \ Param \ ParametersBackTrackExtensions.cs:第48行   位于d:\ CSharp \ NH \ NH \ nhibernate \ src \ NHibernate \ Hql \ Ast \ ANTLR \ Loader \ QueryLoader.cs中的NHibernate.Hql.Ast.ANTLR.Loader.QueryLoader.ResetEffectiveExpectedType(IEnumerable`1 parameterSpecs,QueryParameters queryParameters) :第428行   at NHibernate.Loader.Loader.CreateSqlCommand(QueryParameters queryParameters,ISessionImplementor session)在d:\ CSharp \ NH \ NH \ nhibernate \ src \ NHibernate \ Loader \ Loader.cs:第1649行   位于d:\ CSharp \ NH \ NH \ nhibernate \ src \ NHibernate \ Impl \ MultiQueryImpl.cs中的NHibernate.Impl.MultiQueryImpl.AggregateQueriesInformation():第641行   位于d:\ CSharp \ NH \ NH \ nhibernate \ src \ NHibernate \ Impl \ MultiQueryImpl.cs中的NHibernate.Impl.MultiQueryImpl.get_Parameters():第774行   位于d:\ CSharp \ NH \ NH \ nhibernate \ src \ NHibernate \ Impl \ MultiQueryImpl.cs中的NHibernate.Impl.MultiQueryImpl.CreateCombinedQueryParameters():第754行    位于d:\ CSharp \ NH \ NH \ nhibernate \ src \ NHibernate \ Impl \ MultiQueryImpl.cs中的NHibernate.Impl.MultiQueryImpl.List():第400行    at NHibernate.Impl.FutureQueryBatch.GetResultsFrom(IMultiQuery multiApproach)在d:\ CSharp \ NH \ NH \ nhibernate \ src \ NHibernate \ Impl \ FutureQueryBatch.cs:第24行    at NHibernate.Impl.FutureBatch`2.GetResults()在d:\ CSharp \ NH \ NH \ nhibernate \ src \ NHibernate \ Impl \ FutureBatch.cs:第73行   位于d:\ CSharp \ NH \ NH \ nhibernate \ src \ NHibernate \ Impl \ FutureBatch.cs中的NHibernate.Impl.FutureBatch`2.get_Results():第29行   at NHibernate.Impl.FutureBatch`2.GetCurrentResult [TResult](Int32 currentIndex)在d:\ CSharp \ NH \ NH \ nhibernate \ src \ NHibernate \ Impl \ FutureBatch.cs:第79行   at NHibernate.Impl.FutureBatch`2.c__DisplayClass4`1.b__3()在d:\ CSharp \ NH \ NH \ nhibernate \ src \ NHibernate \ Impl \ FutureBatch.cs:第63行   at 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 source)   在C:\ checkout \ Library Projects \ BaseSystemCore \ TestProject1 \ UnitTest1.cs中的TestProject1.UnitTest1.TestMethod1():第94行

1 个答案:

答案 0 :(得分:2)

这是一个错误。我在Nhibernate问题跟踪器中找到了它:

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

编辑:应该在NH 4.0中修复。