SQLite compiled query
Posted: Sun 21 Nov 2010 05:28
I'm trying to use the CompiledQuery class to improve query performance on a SQLIte db but running into errors. My compiled query throws a cast error of:
Unable to cast object of type 'Devart.Data.Linq.Provider.ProviderType' to type 'Devart.Data.SQLite.Linq.Provider.SQLiteProviderType'.
Here is the syntax of my query:
public static Func>
EnabledTiles = CompiledQuery.Compile((CalibrationDataContext db, bool enabled) =>
from tile in db.Tiles where tile.Enabled == enabled select tile);
public static IEnumerable GetEnabledTiles(bool enabled)
{
CalibrationDataContext db = Program.DataContext;
return CompiledQueries.EnabledTiles(db, enabled);
}
with the following stack trace provided:
at Devart.Data.SQLite.Linq.Provider.Query.a.b(ProviderType A_0, ProviderType A_1)
at Devart.Data.Linq.Provider.Query.DbMethodCallConverter.TranslateToServerMethod(List`1 serverMethods, List`1 largeProviderTypes, List`1 arguments, Type returnType)
at Devart.Data.Linq.Provider.Query.DbMethodCallConverter.VisitBinaryOperator(ab bo)
at Devart.Data.Linq.Provider.Query.SqlVisitor.Visit(SqlNode node)
at Devart.Data.Linq.Provider.Query.SqlVisitor.VisitExpression(SqlExpression exp)
at Devart.Data.Linq.Provider.Query.SqlVisitor.VisitSelectCore(SqlSelect select)
at Devart.Data.Linq.Provider.Query.DbMethodCallConverter.VisitSelect(SqlSelect select)
at Devart.Data.Linq.Provider.Query.SqlVisitor.VisitAlias(d a)
at Devart.Data.Linq.Provider.Query.DbMethodCallConverter.VisitAlias(d a)
at Devart.Data.Linq.Provider.Query.SqlVisitor.Visit(SqlNode node)
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)
I read through the LINQ documentation and did not find any mention of having to provide a cast. Am I missing a ProfiverAttribute declaration somewhere in my query class?
Unable to cast object of type 'Devart.Data.Linq.Provider.ProviderType' to type 'Devart.Data.SQLite.Linq.Provider.SQLiteProviderType'.
Here is the syntax of my query:
public static Func>
EnabledTiles = CompiledQuery.Compile((CalibrationDataContext db, bool enabled) =>
from tile in db.Tiles where tile.Enabled == enabled select tile);
public static IEnumerable GetEnabledTiles(bool enabled)
{
CalibrationDataContext db = Program.DataContext;
return CompiledQueries.EnabledTiles(db, enabled);
}
with the following stack trace provided:
at Devart.Data.SQLite.Linq.Provider.Query.a.b(ProviderType A_0, ProviderType A_1)
at Devart.Data.Linq.Provider.Query.DbMethodCallConverter.TranslateToServerMethod(List`1 serverMethods, List`1 largeProviderTypes, List`1 arguments, Type returnType)
at Devart.Data.Linq.Provider.Query.DbMethodCallConverter.VisitBinaryOperator(ab bo)
at Devart.Data.Linq.Provider.Query.SqlVisitor.Visit(SqlNode node)
at Devart.Data.Linq.Provider.Query.SqlVisitor.VisitExpression(SqlExpression exp)
at Devart.Data.Linq.Provider.Query.SqlVisitor.VisitSelectCore(SqlSelect select)
at Devart.Data.Linq.Provider.Query.DbMethodCallConverter.VisitSelect(SqlSelect select)
at Devart.Data.Linq.Provider.Query.SqlVisitor.VisitAlias(d a)
at Devart.Data.Linq.Provider.Query.DbMethodCallConverter.VisitAlias(d a)
at Devart.Data.Linq.Provider.Query.SqlVisitor.Visit(SqlNode node)
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)
I read through the LINQ documentation and did not find any mention of having to provide a cast. Am I missing a ProfiverAttribute declaration somewhere in my query class?