Compile Query with object input
Posted: Thu 25 Nov 2010 06:40
I'm getting an InvalidOperationException was unhandled by user code with a compiled query, 'Could not format node 'ClientParameter' for execution as SQL.'. The iiner exception is null. The exception detail is the following:
System.InvalidOperationException was unhandled by user code
Message="Could not format node 'ClientParameter' for execution as SQL."
Source="Devart.Data.Linq"
StackTrace:
at Devart.Data.Linq.Provider.Query.SqlFormatter.Visitor.Visit(SqlNode node)
at Devart.Data.Linq.Provider.Query.SqlFormatter.Visitor.VisitMember(g m)
at Devart.Data.Linq.Provider.Query.SqlVisitor.Visit(SqlNode node)
at Devart.Data.Linq.Provider.Query.SqlFormatter.Visitor.Visit(SqlNode node)
at Devart.Data.Linq.Provider.Query.SqlFormatter.Visitor.VisitWithParens(SqlNode node, SqlNode outer)
at Devart.Data.Linq.Provider.Query.SqlFormatter.Visitor.VisitBinaryOperator(ab bo)
at Devart.Data.Linq.Provider.Query.SqlVisitor.Visit(SqlNode node)
at Devart.Data.Linq.Provider.Query.SqlFormatter.Visitor.Visit(SqlNode node)
at Devart.Data.Linq.Provider.Query.SqlFormatter.Visitor.VisitSelect(SqlSelect ss)
at Devart.Data.Linq.Provider.Query.SqlVisitor.VisitAlias(d a)
at Devart.Data.Linq.Provider.Query.SqlVisitor.Visit(SqlNode node)
at Devart.Data.Linq.Provider.Query.SqlFormatter.Visitor.Visit(SqlNode node)
at Devart.Data.Linq.Provider.Query.SqlVisitor.VisitIncludeScope(aj node)
at Devart.Data.Linq.Provider.Query.SqlFormatter.Visitor.VisitIncludeScope(aj node)
at Devart.Data.Linq.Provider.Query.SqlVisitor.Visit(SqlNode node)
at Devart.Data.Linq.Provider.Query.SqlFormatter.Visitor.Visit(SqlNode node)
at Devart.Data.Linq.Provider.Query.SqlFormatter.Format(SqlNode node, CommandType& commandType)
at Devart.Data.Linq.Provider.DataProvider.BuildQuery(ResultShape resultShape, Type resultType, SqlNode node, IList`1 externalParameterAccessors)
at Devart.Data.Linq.Provider.DataProvider.BuildQuery(Expression query)
at Devart.Data.Linq.Provider.DataProvider.Devart.Data.Linq.Provider.IProvider.Compile(Expression query)
at Devart.Data.Linq.CompiledQuery.a(IProvider A_0)
at Devart.Data.Linq.CompiledQuery.a(DataContext A_0, Object[] A_1)
at Devart.Data.Linq.CompiledQuery.Invoke[a,b,c](a A_0, b A_1)
at SpearPanelController.MainForm.CorrectionFactorBackgroundWorkerDoWork(Object sender, DoWorkEventArgs e) in C:\Documents and Settings\mpolsen\My Documents\Visual Studio 2008\Projects\SpearPanelController\src\Main\SpearPanelController\MainForm.cs:line 1596
at System.ComponentModel.BackgroundWorker.OnDoWork(DoWorkEventArgs e)
at System.ComponentModel.BackgroundWorker.WorkerThreadStart(Object argument)
InnerException:
I use a class (object) as input to the query since I have many conditions on the Where part of my query and Func only supports 4 arguments in .Net 3.5.
public static Func>
AttenuationStateFrequencies = CompiledQuery.Compile((CalibrationDataContext db, AttenuationStateContext ctx) =>
from it in db.AttenuationStatePhases
where it.Tile.X == ctx.TileX
select new CalibrationMeasurement { F15 = it.F15, F20 = it.F20 });
The argument is just a class with set/get properties. Is the CompileQuery method incapable of handling this type of input or is there a workaround?
System.InvalidOperationException was unhandled by user code
Message="Could not format node 'ClientParameter' for execution as SQL."
Source="Devart.Data.Linq"
StackTrace:
at Devart.Data.Linq.Provider.Query.SqlFormatter.Visitor.Visit(SqlNode node)
at Devart.Data.Linq.Provider.Query.SqlFormatter.Visitor.VisitMember(g m)
at Devart.Data.Linq.Provider.Query.SqlVisitor.Visit(SqlNode node)
at Devart.Data.Linq.Provider.Query.SqlFormatter.Visitor.Visit(SqlNode node)
at Devart.Data.Linq.Provider.Query.SqlFormatter.Visitor.VisitWithParens(SqlNode node, SqlNode outer)
at Devart.Data.Linq.Provider.Query.SqlFormatter.Visitor.VisitBinaryOperator(ab bo)
at Devart.Data.Linq.Provider.Query.SqlVisitor.Visit(SqlNode node)
at Devart.Data.Linq.Provider.Query.SqlFormatter.Visitor.Visit(SqlNode node)
at Devart.Data.Linq.Provider.Query.SqlFormatter.Visitor.VisitSelect(SqlSelect ss)
at Devart.Data.Linq.Provider.Query.SqlVisitor.VisitAlias(d a)
at Devart.Data.Linq.Provider.Query.SqlVisitor.Visit(SqlNode node)
at Devart.Data.Linq.Provider.Query.SqlFormatter.Visitor.Visit(SqlNode node)
at Devart.Data.Linq.Provider.Query.SqlVisitor.VisitIncludeScope(aj node)
at Devart.Data.Linq.Provider.Query.SqlFormatter.Visitor.VisitIncludeScope(aj node)
at Devart.Data.Linq.Provider.Query.SqlVisitor.Visit(SqlNode node)
at Devart.Data.Linq.Provider.Query.SqlFormatter.Visitor.Visit(SqlNode node)
at Devart.Data.Linq.Provider.Query.SqlFormatter.Format(SqlNode node, CommandType& commandType)
at Devart.Data.Linq.Provider.DataProvider.BuildQuery(ResultShape resultShape, Type resultType, SqlNode node, IList`1 externalParameterAccessors)
at Devart.Data.Linq.Provider.DataProvider.BuildQuery(Expression query)
at Devart.Data.Linq.Provider.DataProvider.Devart.Data.Linq.Provider.IProvider.Compile(Expression query)
at Devart.Data.Linq.CompiledQuery.a(IProvider A_0)
at Devart.Data.Linq.CompiledQuery.a(DataContext A_0, Object[] A_1)
at Devart.Data.Linq.CompiledQuery.Invoke[a,b,c](a A_0, b A_1)
at SpearPanelController.MainForm.CorrectionFactorBackgroundWorkerDoWork(Object sender, DoWorkEventArgs e) in C:\Documents and Settings\mpolsen\My Documents\Visual Studio 2008\Projects\SpearPanelController\src\Main\SpearPanelController\MainForm.cs:line 1596
at System.ComponentModel.BackgroundWorker.OnDoWork(DoWorkEventArgs e)
at System.ComponentModel.BackgroundWorker.WorkerThreadStart(Object argument)
InnerException:
I use a class (object) as input to the query since I have many conditions on the Where part of my query and Func only supports 4 arguments in .Net 3.5.
public static Func>
AttenuationStateFrequencies = CompiledQuery.Compile((CalibrationDataContext db, AttenuationStateContext ctx) =>
from it in db.AttenuationStatePhases
where it.Tile.X == ctx.TileX
select new CalibrationMeasurement { F15 = it.F15, F20 = it.F20 });
The argument is just a class with set/get properties. Is the CompileQuery method incapable of handling this type of input or is there a workaround?