NHibernate LINQ 超时

NHibernate LINQ Timeout

我需要为 NHibernate LINQ 查询设置超时。事件虽然我已经编写了代码并且代码在运行时编译我得到错误

"Method not found: 'System.Linq.IQueryable`1<!!0> NHibernate.Linq.LinqExtensionMethods.Timeout(System.Linq.IQueryable`1<!!0>, Int32)

正在使用的版本是

   `<package id="NHibernate" version="3.3.3.4001" targetFramework="net452" />`

代码看起来像这样

    var gpq = (from spg in session.Query<Table1>()
              join spgm in session.Query<Table2>() 
on spg.Table1Key equals spgm.Table2Key join sp in session.Query<Table3>() on spgm.Table2ID equals sp.Table3ID orderby spg.Table1ID
                                select spg).Timeout(120).Distinct();
                            var groups = gpq.ToList();

有人可以告诉我做错了什么吗?

如果 Timeout() returns 一个新的 IQueryable,您需要将其分配或链接:

var gpq = (
   from spg in session.Query<Table1>()
   join spgm in session.Query<Table2>() on spg.Table1Key equals spgm.Table2Key 
   join sp in session.Query<Table3>() on spgm.Table2ID equals sp.Table3ID 
   orderby spg.Table1ID
   select spg
).Distinct();

var groups = gpq.Timeout(120).ToList();

但是,查看源代码,Timeout() 方法中有一个 Obsolete 属性。它说使用 WithOptions() 方法代替:

var groups = qpq.WithOptions(options => options.SetTimeout(120)).ToList();