diff --git a/src/NHibernate.Test/Linq/QueryLock.cs b/src/NHibernate.Test/Linq/QueryLock.cs
new file mode 100644
index 00000000000..d2bc49db469
--- /dev/null
+++ b/src/NHibernate.Test/Linq/QueryLock.cs
@@ -0,0 +1,47 @@
+using System.Linq;
+using NHibernate.AdoNet;
+using NHibernate.Cfg;
+using NHibernate.Engine;
+using NHibernate.Linq;
+using NUnit.Framework;
+
+namespace NHibernate.Test.Linq
+{
+ public class QueryLock : LinqTestCase
+ {
+
+ [Test]
+ public void CanSetLockLinqQueries()
+ {
+ var result = (from e in db.Customers
+ where e.CompanyName == "Corp"
+ select e).SetLockMode(LockMode.Upgrade).ToList();
+
+ }
+
+
+ [Test]
+ public void CanSetLockOnLinqPagingQuery()
+ {
+ var result = (from e in db.Customers
+ where e.CompanyName == "Corp"
+ select e).Skip(5).Take(5).SetLockMode(LockMode.Upgrade).ToList();
+ }
+
+
+ [Test]
+ public void CanLockBeforeSkipOnLinqOrderedPageQuery()
+ {
+ var result = (from e in db.Customers
+ orderby e.CompanyName
+ select e)
+ .SetLockMode(LockMode.Upgrade).Skip(5).Take(5).ToList();
+
+
+ }
+
+
+ }
+
+}
+
diff --git a/src/NHibernate.Test/NHibernate.Test.csproj b/src/NHibernate.Test/NHibernate.Test.csproj
index eca05f3f59c..5aa048bc42b 100644
--- a/src/NHibernate.Test/NHibernate.Test.csproj
+++ b/src/NHibernate.Test/NHibernate.Test.csproj
@@ -519,6 +519,7 @@
+
diff --git a/src/NHibernate/Linq/GroupBy/AggregatingGroupByRewriter.cs b/src/NHibernate/Linq/GroupBy/AggregatingGroupByRewriter.cs
index e7b3acd7654..6c429d29adf 100644
--- a/src/NHibernate/Linq/GroupBy/AggregatingGroupByRewriter.cs
+++ b/src/NHibernate/Linq/GroupBy/AggregatingGroupByRewriter.cs
@@ -38,6 +38,7 @@ public static class AggregatingGroupByRewriter
typeof (AnyResultOperator),
typeof (AllResultOperator),
typeof (TimeoutResultOperator),
+ typeof (LockResultOperator),
};
public static void ReWrite(QueryModel queryModel)
diff --git a/src/NHibernate/Linq/LinqExtensionMethods.cs b/src/NHibernate/Linq/LinqExtensionMethods.cs
index c8b9acb2c0b..a49147fc2bb 100755
--- a/src/NHibernate/Linq/LinqExtensionMethods.cs
+++ b/src/NHibernate/Linq/LinqExtensionMethods.cs
@@ -28,6 +28,15 @@ public static IQueryable Cacheable(this IQueryable query)
return new NhQueryable(query.Provider, callExpression);
}
+ public static IQueryable SetLockMode(this IQueryable query, LockMode lockMode)
+ {
+ var method = ReflectionHelper.GetMethodDefinition(() => SetLockMode