LINQ to SQL query resulting in StackOverflowException

The LINQ to SQL query in the function below causes a StackOverflowException during run-time. What do I need to do to resolve this? I don't think it's an infinite loop problem - I think I just need to reduce the call stack?

Public Shared Function AddFilters_Current(ByVal query As IQueryable(Of UserChecklistItem)) As IQueryable(Of UserChecklistItem)

    Return From r In query Where
           ((r.UserChecklist.UserId = GetUserId() AndAlso Not r.UserChecklist.DelegationUserId.HasValue) OrElse
           (r.UserChecklist.DelegationUserId.HasValue AndAlso r.UserChecklist.DelegationUserId = GetUserId())) AndAlso
           Not r.UserChecklist.Completed AndAlso
           r.UserChecklist.DateActive <= Date.Today AndAlso
           (Not r.UserChecklist.DateInactive.HasValue OrElse r.UserChecklist.DateInactive > Date.Today)
           Order By r.UserChecklistId Ascending, r.Weight Descending, r.Id Ascending
           Select r

End Function

Public Function GetUserId() As Integer
    Dim sv As Object = HttpContext.Current.Session.Item("UserId")
    If Not TypeOf sv Is Integer Then Return Nothing
    Return DirectCast(sv, Integer)
End Function

It took me a long time to track the cause of the issue down, and I've tried taking calls to GetUserId outside of query and replacing AndAlso with And and OrElse with Or with no luck.

I think I need to re-write this query with something more efficient and any advice on how to do this is very welcome.

UPDATE

Call Stack captured via Crash Dump analysed in Debug Diagnostic Tool (not sure if I have pasted the correct thing here):

NET Call Stack

Function 
DomainNeutralILStubClass.IL_STUB_PInvoke(System.RuntimeTypeHandle, System.Runtime.CompilerServices.ObjectHandleOnStack) 
System.RuntimeTypeHandle.GetGenericTypeDefinition(System.RuntimeTypeHandle, System.Runtime.CompilerServices.ObjectHandleOnStack) 
System.RuntimeType.GetGenericTypeDefinition() 
System.Data.Linq.SqlClient.SqlTypeSystem+Sql2008Provider.From(System.Type, System.Nullable`1) 
System.Data.Linq.SqlClient.SqlTypeSystem+ProviderBase.From(System.Type) 
System.Data.Linq.SqlClient.SqlTypeSystem+ProviderBase.From(System.Object) 
System.Data.Linq.SqlClient.SqlFactory.ValueFromObject(System.Object, System.Type, Boolean, System.Linq.Expressions.Expression) 
System.Data.Linq.SqlClient.QueryConverter.VisitConstant(System.Linq.Expressions.ConstantExpression) 
System.Data.Linq.SqlClient.QueryConverter.VisitInner(System.Linq.Expressions.Expression) 
System.Data.Linq.SqlClient.QueryConverter.VisitWhere(System.Linq.Expressions.Expression, System.Linq.Expressions.LambdaExpression) 
System.Data.Linq.SqlClient.QueryConverter.VisitSequenceOperatorCall(System.Linq.Expressions.MethodCallExpression) 
System.Data.Linq.SqlClient.QueryConverter.VisitMethodCall(System.Linq.Expressions.MethodCallExpression) 
System.Data.Linq.SqlClient.QueryConverter.VisitInner(System.Linq.Expressions.Expression) 
System.Data.Linq.SqlClient.QueryConverter.VisitWhere(System.Linq.Expressions.Expression, System.Linq.Expressions.LambdaExpression) 
System.Data.Linq.SqlClient.QueryConverter.VisitSequenceOperatorCall(System.Linq.Expressions.MethodCallExpression) 
System.Data.Linq.SqlClient.QueryConverter.VisitMethodCall(System.Linq.Expressions.MethodCallExpression) 
System.Data.Linq.SqlClient.QueryConverter.VisitInner(System.Linq.Expressions.Expression) 
System.Data.Linq.SqlClient.QueryConverter.VisitOrderBy(System.Linq.Expressions.Expression, System.Linq.Expressions.LambdaExpression, System.Data.Linq.SqlClient.SqlOrderType) 
System.Data.Linq.SqlClient.QueryConverter.VisitSequenceOperatorCall(System.Linq.Expressions.MethodCallExpression) 
System.Data.Linq.SqlClient.QueryConverter.VisitMethodCall(System.Linq.Expressions.MethodCallExpression) 
System.Data.Linq.SqlClient.QueryConverter.VisitInner(System.Linq.Expressions.Expression) 
System.Data.Linq.SqlClient.QueryConverter.VisitThenBy(System.Linq.Expressions.Expression, System.Linq.Expressions.LambdaExpression, System.Data.Linq.SqlClient.SqlOrderType) 
System.Data.Linq.SqlClient.QueryConverter.VisitSequenceOperatorCall(System.Linq.Expressions.MethodCallExpression) 
System.Data.Linq.SqlClient.QueryConverter.VisitMethodCall(System.Linq.Expressions.MethodCallExpression) 
System.Data.Linq.SqlClient.QueryConverter.VisitInner(System.Linq.Expressions.Expression) 
System.Data.Linq.SqlClient.QueryConverter.VisitThenBy(System.Linq.Expressions.Expression, System.Linq.Expressions.LambdaExpression, System.Data.Linq.SqlClient.SqlOrderType) 
System.Data.Linq.SqlClient.QueryConverter.VisitSequenceOperatorCall(System.Linq.Expressions.MethodCallExpression) 
System.Data.Linq.SqlClient.QueryConverter.VisitMethodCall(System.Linq.Expressions.MethodCallExpression) 
System.Data.Linq.SqlClient.QueryConverter.VisitInner(System.Linq.Expressions.Expression) 
System.Data.Linq.SqlClient.QueryConverter.VisitSelect(System.Linq.Expressions.Expression, System.Linq.Expressions.LambdaExpression) 
System.Data.Linq.SqlClient.QueryConverter.VisitSequenceOperatorCall(System.Linq.Expressions.MethodCallExpression) 
System.Data.Linq.SqlClient.QueryConverter.VisitMethodCall(System.Linq.Expressions.MethodCallExpression) 
System.Data.Linq.SqlClient.QueryConverter.VisitInner(System.Linq.Expressions.Expression) 
System.Data.Linq.SqlClient.QueryConverter.VisitWhere(System.Linq.Expressions.Expression, System.Linq.Expressions.LambdaExpression) 
System.Data.Linq.SqlClient.QueryConverter.VisitSequenceOperatorCall(System.Linq.Expressions.MethodCallExpression) 
System.Data.Linq.SqlClient.QueryConverter.VisitMethodCall(System.Linq.Expressions.MethodCallExpression) 
System.Data.Linq.SqlClient.QueryConverter.VisitInner(System.Linq.Expressions.Expression) 
System.Data.Linq.SqlClient.QueryConverter.VisitOrderBy(System.Linq.Expressions.Expression, System.Linq.Expressions.LambdaExpression, System.Data.Linq.SqlClient.SqlOrderType) 
System.Data.Linq.SqlClient.QueryConverter.VisitSequenceOperatorCall(System.Linq.Expressions.MethodCallExpression) 
System.Data.Linq.SqlClient.QueryConverter.VisitMethodCall(System.Linq.Expressions.MethodCallExpression) 
System.Data.Linq.SqlClient.QueryConverter.VisitInner(System.Linq.Expressions.Expression) 
System.Data.Linq.SqlClient.QueryConverter.VisitThenBy(System.Linq.Expressions.Expression, System.Linq.Expressions.LambdaExpression, System.Data.Linq.SqlClient.SqlOrderType) 
System.Data.Linq.SqlClient.QueryConverter.VisitSequenceOperatorCall(System.Linq.Expressions.MethodCallExpression) 
System.Data.Linq.SqlClient.QueryConverter.VisitMethodCall(System.Linq.Expressions.MethodCallExpression) 
System.Data.Linq.SqlClient.QueryConverter.VisitInner(System.Linq.Expressions.Expression) 
System.Data.Linq.SqlClient.QueryConverter.VisitThenBy(System.Linq.Expressions.Expression, System.Linq.Expressions.LambdaExpression, System.Data.Linq.SqlClient.SqlOrderType) 
System.Data.Linq.SqlClient.QueryConverter.VisitSequenceOperatorCall(System.Linq.Expressions.MethodCallExpression) 
System.Data.Linq.SqlClient.QueryConverter.VisitMethodCall(System.Linq.Expressions.MethodCallExpression) 
System.Data.Linq.SqlClient.QueryConverter.VisitInner(System.Linq.Expressions.Expression) 
System.Data.Linq.SqlClient.QueryConverter.VisitSelect(System.Linq.Expressions.Expression, System.Linq.Expressions.LambdaExpression) 
System.Data.Linq.SqlClient.QueryConverter.VisitSequenceOperatorCall(System.Linq.Expressions.MethodCallExpression) 
System.Data.Linq.SqlClient.QueryConverter.VisitMethodCall(System.Linq.Expressions.MethodCallExpression) 
System.Data.Linq.SqlClient.QueryConverter.VisitInner(System.Linq.Expressions.Expression) 
System.Data.Linq.SqlClient.QueryConverter.VisitWhere(System.Linq.Expressions.Expression, System.Linq.Expressions.LambdaExpression) 
System.Data.Linq.SqlClient.QueryConverter.VisitSequenceOperatorCall(System.Linq.Expressions.MethodCallExpression) 

... cut for brevity ...

System.Data.Linq.SqlClient.QueryConverter.VisitInner(System.Linq.Expressions.Expression) 
System.Data.Linq.SqlClient.QueryConverter.VisitThenBy(System.Linq.Expressions.Expression, System.Linq.Expressions.LambdaExpression, System.Data.Linq.SqlClient.SqlOrderType) 
System.Data.Linq.SqlClient.QueryConverter.VisitSequenceOperatorCall(System.Linq.Expressions.MethodCallExpression) 
System.Data.Linq.SqlClient.QueryConverter.VisitMethodCall(System.Linq.Expressions.MethodCallExpression) 
System.Data.Linq.SqlClient.QueryConverter.VisitInner(System.Linq.Expressions.Expression) 
System.Data.Linq.SqlClient.QueryConverter.VisitThenBy(System.Linq.Expressions.Expression, System.Linq.Expressions.LambdaExpression, System.Data.Linq.SqlClient.SqlOrderType) 
System.Data.Linq.SqlClient.QueryConverter.VisitSequenceOperatorCall(System.Linq.Expressions.MethodCallExpression) 
System.Data.Linq.SqlClient.QueryConverter.VisitMethodCall(System.Linq.Expressions.MethodCallExpression) 
System.Data.Linq.SqlClient.QueryConverter.VisitInner(System.Linq.Expressions.Expression) 
System.Data.Linq.SqlClient.QueryConverter.VisitSelect(System.Linq.Expressions.Expression, System.Linq.Expressions.LambdaExpression) 
System.Data.Linq.SqlClient.QueryConverter.VisitSequenceOperatorCall(System.Linq.Expressions.MethodCallExpression) 
System.Data.Linq.SqlClient.QueryConverter.VisitMethodCall(System.Linq.Expressions.MethodCallExpression) 
System.Data.Linq.SqlClient.QueryConverter.VisitInner(System.Linq.Expressions.Expression) 
System.Data.Linq.SqlClient.QueryConverter.VisitWhere(System.Linq.Expressions.Expression, System.Linq.Expressions.LambdaExpression) 
System.Data.Linq.SqlClient.QueryConverter.VisitSequenceOperatorCall(System.Linq.Expressions.MethodCallExpression) 
System.Data.Linq.SqlClient.QueryConverter.VisitMethodCall(System.Linq.Expressions.MethodCallExpression) 
System.Data.Linq.SqlClient.QueryConverter.VisitInner(System.Linq.Expressions.Expression) 
System.Data.Linq.SqlClient.QueryConverter.VisitOrderBy(System.Linq.Expressions.Expression, System.Linq.Expressions.LambdaExpression, System.Data.Linq.SqlClient.SqlOrderType) 
System.Data.Linq.SqlClient.QueryConverter.VisitSequenceOperatorCall(System.Linq.Expressions.MethodCallExpression) 
System.Data.Linq.SqlClient.QueryConverter.VisitMethodCall(System.Linq.Expressions.MethodCallExpression) 
System.Data.Linq.SqlClient.QueryConverter.VisitInner(System.Linq.Expressions.Expression) 
System.Data.Linq.SqlClient.QueryConverter.VisitThenBy(System.Linq.Expressions.Expression, System.Linq.Expressions.LambdaExpression, System.Data.Linq.SqlClient.SqlOrderType) 
System.Data.Linq.SqlClient.QueryConverter.VisitSequenceOperatorCall(System.Linq.Expressions.MethodCallExpression) 
System.Data.Linq.SqlClient.QueryConverter.VisitMethodCall(System.Linq.Expressions.MethodCallExpression) 
System.Data.Linq.SqlClient.QueryConverter.VisitInner(System.Linq.Expressions.Expression) 
System.Data.Linq.SqlClient.QueryConverter.VisitThenBy(System.Linq.Expressions.Expression, System.Linq.Expressions.LambdaExpression, System.Data.Linq.SqlClient.SqlOrderType) 
System.Data.Linq.SqlClient.QueryConverter.VisitSequenceOperatorCall(System.Linq.Expressions.MethodCallExpression) 
System.Data.Linq.SqlClient.QueryConverter.VisitMethodCall(System.Linq.Expressions.MethodCallExpression) 
System.Data.Linq.SqlClient.QueryConverter.VisitInner(System.Linq.Expressions.Expression) 
System.Data.Linq.SqlClient.QueryConverter.VisitSelect(System.Linq.Expressions.Expression, System.Linq.Expressions.LambdaExpression) 
System.Data.Linq.SqlClient.QueryConverter.VisitSequenceOperatorCall(System.Linq.Expressions.MethodCallExpression) 
System.Data.Linq.SqlClient.QueryConverter.VisitMethodCall(System.Linq.Expressions.MethodCallExpression) 
System.Data.Linq.SqlClient.QueryConverter.VisitInner(System.Linq.Expressions.Expression) 
System.Data.Linq.SqlClient.QueryConverter.VisitWhere(System.Linq.Expressions.Expression, System.Linq.Expressions.LambdaExpression) 
System.Data.Linq.SqlClient.QueryConverter.VisitSequenceOperatorCall(System.Linq.Expressions.MethodCallExpression) 
System.Data.Linq.SqlClient.QueryConverter.VisitMethodCall(System.Linq.Expressions.MethodCallExpression) 
System.Data.Linq.SqlClient.QueryConverter.VisitInner(System.Linq.Expressions.Expression) 
System.Data.Linq.SqlClient.QueryConverter.VisitOrderBy(System.Linq.Expressions.Expression, System.Linq.Expressions.LambdaExpression, System.Data.Linq.SqlClient.SqlOrderType) 
System.Data.Linq.SqlClient.QueryConverter.VisitSequenceOperatorCall(System.Linq.Expressions.MethodCallExpression) 
System.Data.Linq.SqlClient.QueryConverter.VisitMethodCall(System.Linq.Expressions.MethodCallExpression) 
System.Data.Linq.SqlClient.QueryConverter.VisitInner(System.Linq.Expressions.Expression) 
System.Data.Linq.SqlClient.QueryConverter.VisitThenBy(System.Linq.Expressions.Expression, System.Linq.Expressions.LambdaExpression, System.Data.Linq.SqlClient.SqlOrderType) 
System.Data.Linq.SqlClient.QueryConverter.VisitSequenceOperatorCall(System.Linq.Expressions.MethodCallExpression) 
System.Data.Linq.SqlClient.QueryConverter.VisitMethodCall(System.Linq.Expressions.MethodCallExpression) 
System.Data.Linq.SqlClient.QueryConverter.VisitInner(System.Linq.Expressions.Expression) 
System.Data.Linq.SqlClient.QueryConverter.VisitThenBy(System.Linq.Expressions.Expression, System.Linq.Expressions.LambdaExpression, System.Data.Linq.SqlClient.SqlOrderType) 
System.Data.Linq.SqlClient.QueryConverter.VisitSequenceOperatorCall(System.Linq.Expressions.MethodCallExpression) 
System.Data.Linq.SqlClient.QueryConverter.VisitMethodCall(System.Linq.Expressions.MethodCallExpression) 
System.Data.Linq.SqlClient.QueryConverter.VisitInner(System.Linq.Expressions.Expression) 
System.Data.Linq.SqlClient.QueryConverter.VisitSelect(System.Linq.Expressions.Expression, System.Linq.Expressions.LambdaExpression) 
System.Data.Linq.SqlClient.QueryConverter.VisitSequenceOperatorCall(System.Linq.Expressions.MethodCallExpression) 
System.Data.Linq.SqlClient.QueryConverter.VisitMethodCall(System.Linq.Expressions.MethodCallExpression) 
System.Data.Linq.SqlClient.QueryConverter.VisitInner(System.Linq.Expressions.Expression) 
System.Data.Linq.SqlClient.QueryConverter.VisitWhere(System.Linq.Expressions.Expression, System.Linq.Expressions.LambdaExpression) 
System.Data.Linq.SqlClient.QueryConverter.VisitSequenceOperatorCall(System.Linq.Expressions.MethodCallExpression) 
System.Data.Linq.SqlClient.QueryConverter.VisitMethodCall(System.Linq.Expressions.MethodCallExpression) 
System.Data.Linq.SqlClient.QueryConverter.VisitInner(System.Linq.Expressions.Expression) 
System.Data.Linq.SqlClient.QueryConverter.VisitOrderBy(System.Linq.Expressions.Expression, System.Linq.Expressions.LambdaExpression, System.Data.Linq.SqlClient.SqlOrderType) 
System.Data.Linq.SqlClient.QueryConverter.VisitSequenceOperatorCall(System.Linq.Expressions.MethodCallExpression) 
System.Data.Linq.SqlClient.QueryConverter.VisitMethodCall(System.Linq.Expressions.MethodCallExpression) 
System.Data.Linq.SqlClient.QueryConverter.VisitInner(System.Linq.Expressions.Expression) 
System.Data.Linq.SqlClient.QueryConverter.VisitThenBy(System.Linq.Expressions.Expression, System.Linq.Expressions.LambdaExpression, System.Data.Linq.SqlClient.SqlOrderType) 
System.Data.Linq.SqlClient.QueryConverter.VisitSequenceOperatorCall(System.Linq.Expressions.MethodCallExpression) 
System.Data.Linq.SqlClient.QueryConverter.VisitMethodCall(System.Linq.Expressions.MethodCallExpression) 
System.Data.Linq.SqlClient.QueryConverter.VisitInner(System.Linq.Expressions.Expression) 
System.Data.Linq.SqlClient.QueryConverter.VisitThenBy(System.Linq.Expressions.Expression, System.Linq.Expressions.LambdaExpression, System.Data.Linq.SqlClient.SqlOrderType) 
System.Data.Linq.SqlClient.QueryConverter.VisitSequenceOperatorCall(System.Linq.Expressions.MethodCallExpression) 
System.Data.Linq.SqlClient.QueryConverter.VisitMethodCall(System.Linq.Expressions.MethodCallExpression) 
System.Data.Linq.SqlClient.QueryConverter.VisitInner(System.Linq.Expressions.Expression) 
System.Data.Linq.SqlClient.QueryConverter.VisitSelect(System.Linq.Expressions.Expression, System.Linq.Expressions.LambdaExpression) 
System.Data.Linq.SqlClient.QueryConverter.VisitSequenceOperatorCall(System.Linq.Expressions.MethodCallExpression) 
System.Data.Linq.SqlClient.QueryConverter.VisitMethodCall(System.Linq.Expressions.MethodCallExpression) 
System.Data.Linq.SqlClient.QueryConverter.VisitInner(System.Linq.Expressions.Expression) 
System.Data.Linq.SqlClient.QueryConverter.VisitAggregate(System.Linq.Expressions.Expression, System.Linq.Expressions.LambdaExpression, System.Data.Linq.SqlClient.SqlNodeType, System.Type) 
System.Data.Linq.SqlClient.QueryConverter.VisitSequenceOperatorCall(System.Linq.Expressions.MethodCallExpression) 
System.Data.Linq.SqlClient.QueryConverter.VisitMethodCall(System.Linq.Expressions.MethodCallExpression) 
System.Data.Linq.SqlClient.QueryConverter.VisitInner(System.Linq.Expressions.Expression) 
System.Data.Linq.SqlClient.QueryConverter.ConvertOuter(System.Linq.Expressions.Expression) 
System.Data.Linq.SqlClient.SqlProvider.BuildQuery(System.Linq.Expressions.Expression, System.Data.Linq.SqlClient.SqlNodeAnnotations) 
System.Data.Linq.SqlClient.SqlProvider.System.Data.Linq.Provider.IProvider.Execute(System.Linq.Expressions.Expression) 
System.Data.Linq.DataQuery`1[[System.__Canon, mscorlib]].System.Linq.IQueryProvider.Execute(System.Linq.Expressions.Expression) 
System.Web.Query.Dynamic.DynamicQueryable.Count(System.Linq.IQueryable) 
System.Web.UI.WebControls.DynamicQueryableWrapper.Count(System.Linq.IQueryable) 
System.Web.UI.WebControls.QueryableDataSourceView.ExecutePaging(System.Linq.IQueryable, System.Web.UI.WebControls.QueryContext) 
System.Web.UI.WebControls.QueryableDataSourceView.ExecuteQuery(System.Linq.IQueryable, System.Web.UI.WebControls.QueryContext) 
System.Web.UI.WebControls.LinqDataSourceView.ExecuteSelect(System.Web.UI.DataSourceSelectArguments) 
System.Web.UI.DataSourceView.Select(System.Web.UI.DataSourceSelectArguments, System.Web.UI.DataSourceViewSelectCallback) 
System.Web.UI.WebControls.DataBoundControl.PerformSelect() 
System.Web.UI.WebControls.BaseDataBoundControl.DataBind() 
System.Web.UI.WebControls.GridView.DataBind() 
System.Web.UI.WebControls.BaseDataBoundControl.EnsureDataBound() 
System.Web.UI.WebControls.GridView.OnPreRender(System.EventArgs) 
System.Web.UI.Control.PreRenderRecursiveInternal() 
System.Web.UI.Control.PreRenderRecursiveInternal() 
System.Web.UI.Control.PreRenderRecursiveInternal() 
System.Web.UI.Control.PreRenderRecursiveInternal() 
System.Web.UI.Control.PreRenderRecursiveInternal() 
System.Web.UI.Control.PreRenderRecursiveInternal() 
System.Web.UI.Control.PreRenderRecursiveInternal() 
System.Web.UI.Page.ProcessRequestMain(Boolean, Boolean) 
System.Web.UI.Page.ProcessRequest(Boolean, Boolean) 
System.Web.UI.Page.ProcessRequest() 
System.Web.UI.Page.ProcessRequestWithNoAssert(System.Web.HttpContext) 
System.Web.UI.Page.ProcessRequest(System.Web.HttpContext) 
ASP.dynamicdata_pagetemplates_listdetails_aspx.ProcessRequest(System.Web.HttpContext) 
System.Web.HttpApplication+CallHandlerExecutionStep.System.Web.HttpApplication.IExecutionStep.Execute() 
System.Web.HttpApplication.ExecuteStep(IExecutionStep, Boolean ByRef) 
System.Web.HttpApplication+ApplicationStepManager.ResumeSteps(System.Exception) 
System.Web.HttpApplication.System.Web.IHttpAsyncHandler.BeginProcessRequest(System.Web.HttpContext, System.AsyncCallback, System.Object) 
System.Web.HttpRuntime.ProcessRequestInternal(System.Web.HttpWorkerRequest) 
System.Web.HttpRuntime.ProcessRequestNoDemand(System.Web.HttpWorkerRequest) 
System.Web.Hosting.ISAPIRuntime.ProcessRequest(IntPtr, Int32) 
DomainNeutralILStubClass.IL_STUB_COMtoCLR(Int32, Int32, IntPtr) 

I must admit it looks like infinite loop - bit this is a bit beyond me atm!

UPDATE

Below cut-down query is still causing a StackOverflowException:

Return From r In query Where
       r.UserChecklist.DateActive <= Date.Today AndAlso
       (Not r.UserChecklist.DateInactive.HasValue OrElse r.UserChecklist.DateInactive > Date.Today)
       Order By r.UserChecklistId Ascending, r.Weight Descending, r.Id Ascending
       Select r

UPDATE

Tried the following query with no luck - thought it would be more efficient but still causes a StackOverflowException.

Dim userId As Integer = GetUserId()
Dim today As Date = Date.Today

Return From r In query Where
       If(Not r.UserChecklist.DateInactive.HasValue, True, r.UserChecklist.DateInactive > today)
       Order By r.UserChecklistId Ascending, r.Weight Descending, r.Id Ascending
       Select r
Jon Skeet
people
quotationmark

I'm surprised that the current code is causing a stack overflow, but even if it weren't it couldn't work. Currently you're calling your local method from within your query: that's not going to work, as it can't be converted into SQL.

Instead, I suggest you call the method before your query, storing the result as a local variable - then use that variable where you were calling it in the query:

Public Shared Function AddFilters_Current(ByVal query As IQueryable(Of UserChecklistItem)) As IQueryable(Of UserChecklistItem)

    Dim userId = GetUserId()
    Return From r In query Where
       ((r.UserChecklist.UserId = userId AndAlso Not r.UserChecklist.DelegationUserId.HasValue) OrElse
       (r.UserChecklist.DelegationUserId.HasValue AndAlso r.UserChecklist.DelegationUserId = userId)) AndAlso
       Not r.UserChecklist.Completed AndAlso
       r.UserChecklist.DateActive <= Date.Today AndAlso
       (Not r.UserChecklist.DateInactive.HasValue OrElse r.UserChecklist.DateInactive > Date.Today)
       Order By r.UserChecklistId Ascending, r.Weight Descending, r.Id Ascending
       Select r

End Function

people

See more on this question at Stackoverflow