SQLITE で LINQ によって処理されたくない式があります。
SQLLite 3.8.3.1 を使用する SQLite-net 2.1 を使用する
式は次のとおりです。
int stars = location.MinRating;
bool onlyLargePhotos = location.OnlyLargePhotos;
var query = db.MediaItems.Where(x => x.LocationId == location.LocationId && x.Rating >= stars && (!onlyLargePhotos || (onlyLargePhotos && (x.Width >= 2000 || x.Height >= 2000))));
このクエリは、アクセスすると失敗します。!onlyLargePhotos でつまずいているようです。
例外は次のとおりです。
System.NotSupportedException occurred
HResult=-2146233067
Message=Cannot compile: Not
Source=SQLite.Net
StackTrace:
at SQLite.Net.TableQuery`1.CompileExpr(Expression expr, List`1 queryArgs)
at SQLite.Net.TableQuery`1.CompileExpr(Expression expr, List`1 queryArgs)
at SQLite.Net.TableQuery`1.CompileExpr(Expression expr, List`1 queryArgs)
at SQLite.Net.TableQuery`1.GenerateCommand(String selectionList)
at SQLite.Net.TableQuery`1.Count()
at SmartFrame.Mosh.DB.WeightedLocationHelper.<>c__DisplayClass9.<CalculateWeightsAsync>b__2(IndexConnection db)
InnerException:
また、クエリが実行する SQL を確認する方法があれば教えてもらえますか? SQL LINQ では、IQueryable の ToString() によって、実行しようとしているものが表示されます。
(ところで: 2 つの異なる LINQ 式を作成することで、これを回避できることはわかっています。ただし、より多くの順列 (チェックするフィールド) が増えるため、8-16 は必要ありません。維持する必要があるクエリ - SQL エンジンで作業を行いたい)